我正在使用jQuery调用几个ajax搜索服务,并希望在所有调用完成时触发一个合并结果的函数(某种回调函数等待所有回调返回)。实现这一目标的最佳方法是什么?
感谢
月
答案 0 :(得分:1)
我过去看过的一种方法是反击:
var counter = 3;
$.ajax({
// ..
success: function() {
if(--counter == 0) handleComplete();
// ...
}
});
// 2 other similar ajax calls here
function handleComplete() {
// this is done when all are complete
}
显然,你也想要处理错误。
答案 1 :(得分:0)
我可能会使用ajaxComplete
event。你必须有自己的逻辑来知道系列何时开始和结束,但这可能会从你的应用程序逻辑出来。
这是一个简单的例子(live copy):
jQuery(function($) {
var count = 0;
display("Hooking up handler");
$(document.body).ajaxComplete(function(event, xhr, options) {
++count;
display("Got a completion, new counter value = " + count);
});
display("Doing three ajax requests.");
$.ajax({
url: "http://jsbin.com/aciyu4"
});
$.ajax({
url: "http://jsbin.com/aciyu4"
});
$.ajax({
url: "http://jsbin.com/aciyu4"
});
function display(msg) {
$("<p/>").html(msg).appendTo(document.body);
}
});
在该示例中,我使用count
变量跟踪已完成的请求已完成,注册处理程序为closure(因此可以访问它)。
答案 2 :(得分:0)
进行ajax调用时增加局部变量。在返回回调中减少它。当一个回调将var触发回0时,调用全局结果回调。您也可以使用您所做的一系列调用,或堆栈等...