Javascript 将本地JS函数与jQuery指令$.when()一起使用
我想执行几个ajax请求并等待所有请求完成,然后继续使用jQueryJavascript 将本地JS函数与jQuery指令$.when()一起使用,javascript,jquery,ajax,Javascript,Jquery,Ajax,我想执行几个ajax请求并等待所有请求完成,然后继续使用jQuery$.when()方法 对于php脚本,这很好,我创建了以下几个函数: function ajax1() { var settings = { type: "GET", url: "root/scripts/script.php", }; return $.ajax(settings); } 但是,如果我还想等待JS函数,它位于与$不同的位置。when(…)指令,这将如何工
$.when()
方法
对于php脚本,这很好,我创建了以下几个函数:
function ajax1() {
var settings = {
type: "GET",
url: "root/scripts/script.php",
};
return $.ajax(settings);
}
但是,如果我还想等待JS函数,它位于与$不同的位置。when(…)
指令,这将如何工作
例如函数abc()
,位于根/scripts/a.js
中。如何对位于本地JS文件中的函数执行AJAX调用并将其添加到$.when()
构造中?以便:
$.when(ajax1(), ajax2()).done(function(a1, a2){
//a1[0] is the return value from the php script
//a2[0] is the return value from the function abc()
});
由于JS是按顺序执行的,因此当正文时,将
abc()
函数作为$的第一行就足够了
只有在所有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()
函数完成之前,将不会执行下面的行
如果其中一个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:尚未执行代码,可能有一些小部分需要微调。希望这就是您要寻找的:
var func1Cb=function(){
对于(var i=0;i<10000;i++);
console.log('done1');
var promise=$.Deferred();
承诺。决心();
回报承诺;
}
var func2Cb=函数(){
对于(var i=0;i<10000;i++);
console.log('done2');
var promise=$.Deferred();
承诺。决心();
回报承诺;
}
$.when(func1Cb(),func2Cb()).done(function()){
控制台日志(123);
});我不知道你在问什么。函数的位置没有区别,只要它在作用域内就行。但是在js函数上ajax调用的语法会是什么样子呢?仅仅更改上面php示例的url是不够的。如何指定执行abc()
函数?但是abc()
函数不在$所在的文件中。当(…)
指令位于时。所以我不能直接调用abc()
。你不能加载它吗jQuery.getScript('file_where_abc_is.js')
那么你的意思是:$.when(ajax1(),ajax2(),ajax3(),ajax4()).done(函数(a1,a2,a3,a4){jQuery.getScript('file_where_abc_is.js'))…
?@d4rty是的,类似这样。检查答案。或者使用htmlscript
标记简单地包含它。但是getScript
将异步执行。我想等待所有脚本,直到我继续。我如何才能将它插入$。何时(…)
如果func1Cb()
位于script1.js
,func2Cb()
位于script2.js
和$。当(..)
构造位于script3.js
中?它们位于哪个js文件中并不重要,只要script1和script2加载完成后script3代码将执行,但假设我有script1.js
函数func1Cb()
和script2.js
函数func1Cb()
。我不能只说例如在script3.js
$中,…
。我必须指定脚本文件的路径。我如何才能做到这一点?您可以使用带有src标记的html文件加载脚本,或者在最坏的情况下,如果您不想将加载的脚本添加到html文件中,您可以使用$.getScript,或者使用相关脚本文件插入src标记。从不同的脚本文件调用函数不需要特殊语法只要函数在同一作用域上运行,就可以租用js文件。如果func1Cb()
和func2Cb()
位于不同的文件中,并且$。when()
指令位于其他位置,请更改您的答案。我没有得到它。