使用本地JS函数和jQuery指令$ .when()

时间:2016-04-28 09:33:50

标签: javascript jquery ajax

我想执行几个ajax请求,等待一切完成,然后继续使用jQuery /(@media[^{]+\{(?:([^{]+?\{[^}]*?\}\s*)*|(?1))*\})/s 方法。

对于php脚本,这很好用,我创建了几个这样的函数:

$.when()

但是,如果我还想等待JS函数(它位于与function ajax1() { var settings = { type: "GET", url: "root/scripts/script.php", }; return $.ajax(settings); } 指令不同的位置?

例如位于$.when(..)的{​​{1}}。如何对位于本地JS文件中的函数执行AJAX调用并将其添加到function abc()构造中?这样:

root/scripts/a.js

2 个答案:

答案 0 :(得分:1)

由于JS是按顺序执行的,因此将abc()函数作为$.when正文的第一行包含就足够了。

只有在完成所有ajax调用后才执行abc():

$.when(ajax1(), ajax2(), ajax3(), ajax4()).done(function(a1, a2, a3, a4){
    $.getScript( "file_where_abc_is.js", function( data, textStatus, jqxhr ) {
         abc();
         //...
    });
});

在完成所有ajax调用并完成abc()功能之前,不会执行abc()以下的行。

如果其中一个ajax返回特定值/错误,则前一种方法可以很容易地避免调用abc()。此外,您可以确保在调用abc()之前完成所有ajax调用。或者根据ajax调用的结果调用不同的函数。我不确定你是否需要这些。

如果您在调用abc()时不介意或不关心,您也可以反过来这样做:

$.getScript( "file_where_abc_is.js", function( data, textStatus, jqxhr ) {
    $.when(ajax1(), ajax2(), ajax3(), ajax4(), abc()).done(function(a1, a2, a3, a4, abcAnswer) {
        //...
    }
});

又一个版本,类似于最后一个版本:

function ajaxABC() {
    $.getScript( "file_where_abc_is.js", function() {
         return abc();
    });
}

$.when(ajax1(), ajax2(), ajax3(), ajax4(), ajaxABC()).done(function(a1, a2, a3, a4, abcAnswer) {
     // ....
}

PS:没有执行代码,可能会有一些小部件需要微调。

答案 1 :(得分:1)

希望这是您正在寻找的:



var func1Cb = function(){
  for(var i = 0; i < 10000; i++); 
  console.log('done1'); 
  var promise = $.Deferred(); 
  promise.resolve(); 
  return promise;
}

var func2Cb = function(){
  for(var i = 0; i < 10000; i++); 
  console.log('done2'); 
  var promise = $.Deferred(); 
  promise.resolve(); 
  return promise;
}

$.when(func1Cb(), func2Cb()).done(function(){
  console.log(123);
});
&#13;
&#13;
&#13;