按顺序嵌套ajax

时间:2015-12-19 13:18:17

标签: javascript jquery ajax

我正在尝试运行一些在内部有ajax调用的函数,按顺序。我无法异步执行此操作,因为它们都是同时启动的。

这是我的代码:

function engine_start() {
    a1();
    a2();
}

a1() {
    $.ajax(
        url: // some code and url
    }).then(function(data) {
    if (some_condition()) {
        console.log("finished a1. success");
    }
});
};

a2() {
    $.ajax(
        url: // some code and url
    }).then(function(data) {
    if (some_condition()) {
        console.log("finished a2. success");
    }
});
};

我希望a2()仅在a1()成功后执行,在我的情况下是finished a1. success。注意some_condition()也包含内部ajax请求,所以我也需要处理它。

所以我理想的运行会是这样的:

1) engine_start()
2) a1 starts executing. 
3) a1 finishes 
4) a2 starts executing.
5) a2 finishes

1 个答案:

答案 0 :(得分:1)

你应该使用某种回调机制。

function engine_start() {
    a1(a2);
}

a1(callback) {
    $.ajax(
        url: // some code and url
    }).then(function(data) {
    if (some_condition()) {
        console.log("finished a1. success");
        callback(); // Will execute a2 when a1 is done executing.
    }
});
};

a2() {
    $.ajax(
        url: // some code and url
    }).then(function(data) {
    if (some_condition()) {
        console.log("finished a2. success");
    }
});
};