假设我有以下功能:
function A(){
func B();
ajax call last;
}
func B(){
if some condition1
func C();
if some condition2
func D();
if some condition3
func E();
}
func C(){
some ajax cal 1
}
func D(){
ajax call 2
}
func E(){
ajax call 3
}
我的问题是ajax调用last只有在所有以前的ajax调用完成后才会被触发.i.ejax调用1,2,3。
答案 0 :(得分:2)
如果你正在使用jQuery,那么你可以根据 promise 访问各种调用。致$.ajax
的电话会返回承诺,可用于推迟后续通话。请参阅jQuery when
调用的文档(docs here)。
使用when
,您可以在$.ajax
来电完成后执行某项功能。您可以使用相同的技术对$.ajax
或多次呼叫进行单次此类呼叫。
我不确定您的问题是如何根据您的要求进行连接,但这是基于您的代码的尝试(未经测试但这应该让您走上正轨):
func B()
{
var callC = null;
var callD = null;
var callE = null;
if (condition1)
callC = $.ajax("/call/1");
if (condition2)
callD = $.ajax("/call/2");
if (condition3)
callE = $.ajax("/call/3");
$.when(callC, callD, callE).then($.ajax("/call/last"));
}
一旦3个AJAX调用完成, .then
将执行,无论其成功与否。如果您只想在所有呼叫都恢复成功的情况下继续,请查看.done
。
答案 1 :(得分:0)
function A() {
return B();
}
function B() {
if (some_condition1) {
return C();
};
if (some_condition2) {
return D();
};
if (some_condition3) {
return E();
};
}
function C() {
// some ajax call 1
return $.ajax()
}
function D() {
// ajax call 2
return $.ajax()
}
function E() {
// ajax call 3
return $.ajax()
}
A().then(function() {
// ajax call last;
return $.ajax()
});