我想执行几个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
答案 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;