gpt4 book ai didi

jquery 1.5.1 延迟对象 .when() .then() 混淆

转载 作者:行者123 更新时间:2023-12-01 03:26:00 24 4
gpt4 key购买 nike

我有两个 webmethods 从 .net 3.5 页面返回日期。
每个分别返回开始和结束日期字符串。
我尝试调用它们,然后在它们都作为简单测试的警报完成后输出它们的结果,但我无法成功完成此操作。
当我单步执行代码时,在填充全局变量之前会显示警报。一旦显示警报,变量就会被填充。我做错了什么?

<script type="javascript">
var startDate, endDate;

$(document).ready(function(){
$.when(GetStartDate(), GetEndDate()).then(Output());
});

function GetStartDate(){
return $.ajax({
type="POST",
url="myurl/page.aspx/GetStartDate",
data = {},
contentType="json",
success: function(data){ startDate = data.d.toString();},
failure:failureAlertMsg
});
}

function GetEndDate(){
return $.ajax({
type="POST",
url="myurl/page.aspx/GetEndDate",
data = {},
contentType="json",
success: function(data){ endDate = data.d.toString();},
failure:failureAlertMsg
});
}

function Output(){
alert('StartDate: ' + startDate + '\nEndDate: ' + endDate');
}
</script>

最佳答案

您正在立即执行这些函数 GetStartDate、GetEndDate 和 Output,我认为这不是您想要的。

我不熟悉新的延迟对象功能,但我的猜测是您想要传递对函数的引用,然后函数将在适当的时间执行该函数。在您的情况下,您会说立即执行此函数,因此您的警报会立即发生,并且您还会看到 ajax 请求立即发生,尽管由于 ajax 的异步性质,您可能不会注意到。

类似于

$.when(GetStartDate, GetEndDate).then(Output);

可能更合适?

其他信息

如果您阅读 jquery docs对于 .then,您会看到它应该提供 donefailure 回调,因为您只是给出一个,我会使用 done 代替:

$.when(GetStartDate, GetEndDate).done(Output);

我再次不知道延迟对象是如何工作的,但我会首先使用控制台记录一些消息。例如,在 ajax 函数的每个成功回调中执行类似 console.log(">> GetStartDate:success()") 或类似的操作,以便您可以查看成功函数是否为被正确调用。对于延迟对象,ajax 函数的 success 回调是否仍会被调用?我找不到这方面的信息,但它可能实际上将这些值传递给您的 done 回调函数,并且您可以访问那里的所有内容?不完全确定。

关于jquery 1.5.1 延迟对象 .when() .then() 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com