我有两个 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
,您会看到它应该提供 done
和 failure
回调,因为您只是给出一个,我会使用 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/