在所有之前的ajax调用完成后触发ajax调用

时间:2015-06-15 03:45:16

标签: javascript jquery ajax

假设我有以下功能:

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。

2 个答案:

答案 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)

尝试使用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()
});