假设我有如下函数:
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调用都完成了.i.e ajax调用1、2、3时,才应该触发ajax调用的最后一个。
发布于 2015-06-15 11:48:56
如果你使用的是jQuery,那么你就可以访问基于promise的各种调用。对$.ajax的调用将返回一个promise,该promise可用于延迟后续调用。请参阅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"));
}.then将在3个AJAX调用完成后执行,无论它们是成功还是失败。如果你只想在所有调用都返回成功的情况下继续,也可以看看.done。
发布于 2015-06-15 11:54:53
尝试使用return、.then()
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()
});https://stackoverflow.com/questions/30837046
复制相似问题