在jquery中,如何跟踪从一个函数调用的多个ajax请求

时间:2010-06-05 12:20:42

标签: jquery ajax

我正在使用jquery并且在一个函数中我正在调用多个函数,这些函数正在执行不同的ajax请求,例如

function contactForm(){
loadCountryList();
loadMyData();
checkUserType();

// doing my stuff

}

我怎么知道是否所有的ajax请求都已完成,以便我最终开始做我的东西? 我不想逐个调用它们来最小化请求时间。任何建议都会对我有所帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用the global ajax handlers here,特别是.ajaxStop(),如下所示:

$(document).ajaxStop(function() {
  alert("All requests have completed!");
  //if you don't want to run it again, for example on future requests
  //then just unbind it like any other event :)
  $(this).unbind('ajaxStop');
});

您也可以直接在要显示的元素上使用它,例如:

$("#successDiv").ajaxStop(function() {
  $(this).fadeIn();
});

当{strong>所有请求完成时,.ajaxStop()处理程序(它只是一个事件)运行,而不是在每个请求完成之后。

答案 1 :(得分:1)

// something like this

var countriesLoaded = false;
var dataLoaded = false; 
var userTypeChecked = false; 
var didRestOfStuff = false;

function readyForNextStage() {
  return countriesLoaded && dataLoaded && userTypeChecked;
}

// after you get a complete on each ajax callback 
countriesLoaded = true; // or dataLoaded and so on
if (readyForNextStage() && !didRestOfStuff) {
  didRestOfStuff = true;
  // do rest of stuff
}