当我的所有ajax调用完成后,如何触发函数?

时间:2010-10-04 14:27:14

标签: jquery

我正在使用jQuery调用几个ajax搜索服务,并希望在所有调用完成时触发一个合并结果的函数(某种回调函数等待所有回调返回)。实现这一目标的最佳方法是什么?

感谢

3 个答案:

答案 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时,调用全局结果回调。您也可以使用您所做的一系列调用,或堆栈等...