我正在使用jQuery调用几个ajax搜索服务,并希望在所有调用完成时触发一个合并结果的函数(某种等待所有回调返回的回调函数)。实现这一目标的最佳方法是什么?
谢谢
7月
发布于 2010-10-04 22:35:26
我过去见过的一种方法是计数器:
var计数器= 3;
$.ajax({
// ..
success: function() {
if(--counter == 0) handleComplete();
// ...
}
});
// 2 other similar ajax calls here
function handleComplete() {
// this is done when all are complete
}显然,你也会想要处理错误。
发布于 2010-10-04 22:31:45
我可能会使用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 (因此可以访问它)。
发布于 2010-10-04 22:34:07
在进行ajax调用时增加一个局部变量。在返回回调时减小它。当一个回调触发var回调为0时,调用全局结果回调。你也可以选择使用你所做的调用数组,或者堆栈等等。
https://stackoverflow.com/questions/3856173
复制相似问题