我一次调用多个ajax请求。我有一个函数调用服务器并获取响应并处理它。根据传递给它的参数,我将决定在服务器端返回什么。
我希望在完成所有ajax请求后调用一个函数,因为每个请求都需要不同的时间跨度,具体取决于各个方面。
我绑定了jQuery http://api.jquery.com/jQuery.when/但是.then()
中的函数会被立即调用。
以下是我的尝试:
$.when(GetAjaxData(someUrl1), GetAjaxData(someUrl2), GetAjaxData(someUrl3)).then(alert("done"), alert("not done"));
你能想到其他任何方法吗?
答案 0 :(得分:2)
鲜为人知的事实是,如果任何一个参数失败,$ .when()会立即执行then()回调。引用文档:
http://api.jquery.com/jQuery.when/
在多个Deferreds案例中,其中一个Deferreds被拒绝,jQuery.when立即触发其主Deferred的failCallbacks。请注意,此时某些延迟可能仍未解决。如果您需要为此情况执行其他处理,例如取消任何未完成的ajax请求,则可以在闭包中保留对基础jqXHR对象的引用,并在failCallback中检查/取消它们。
实际上没有内置的等待方式,直到所有这些方式都完成,无论其成功/失败状态如何。
所以,我为你建了一个$ .whenAll():)
答案 1 :(得分:0)
jQuery.when
仅在返回jQuery.Deferred
对象时有效,因此在GetAjaxData
函数中,您希望返回jqXHR对象(延迟)。
这样的事情:
function GetAjaxData(url) {
return $.ajax({
url: url,
... more options
})
}
这将执行AJAX请求并返回jQuery.when
知道如何使用的jqXHR对象。
答案 2 :(得分:0)
// Called when all deferreds are either resolved or rejected
$.when(
$.ajax("/page1.php"),
$.ajax("/page2.php"),
$.ajax("/page3.php"))
.always(function() { alert("AJAX requests completed") });
答案 3 :(得分:0)
$(document).ajaxStop(function () {
// or call the function which you want to call after all the ajax calls
});