jQuery现在为此目的定义了一个when函数。
它接受任意数量的Deferred对象作为参数,并在所有这些对象解析时执行一个函数。
这意味着,如果你想发起(例如)四个ajax请求,然后在完成后执行一个动作,你可以这样做:$.when(ajax1(), ajax2(), ajax3(), ajax4()).done(function(a1, a2, a3, a4){
// the code here will be executed when all four ajax requests resolve.
// a1, a2, a3 and a4 are lists of length 3 containing the response text,
// status, and jqXHR object for each of the four ajax calls respectively.});function ajax1() {
// NOTE: This function must return the value
// from calling the $.ajax() method.
return $.ajax({
url: "someUrl",
dataType: "json",
data: yourJsonData,
...
});}
在我看来,它使得语法清晰明确,并避免涉及任何全局变量,如ajaxStart和ajaxStop,这些变量可能会在页面开发时产生不必要的副作用。
如果你事先不知道需要等待多少个ajax参数(即你想使用可变数量的参数),它仍然可以完成,但只是有点棘手。请参阅将Deferreds数组传递给$ .when()(也许是jQuery。当使用可变数量的参数进行故障排除时)。
如果你需要更深入地控制ajax脚本等的失败模式,你可以保存返回的对象.when()- 它是一个包含所有原始ajax查询的jQuery Promise对象。您可以在其上调用.then()或.fail()添加详细的成功/失败处理程序。