JavaScript:订购AJAX调用

DHR*_*SAL 5 javascript ajax jquery

我有3个特殊功能的ajax调用.第3个呼叫取决于前2个呼叫,即对于第3个呼叫,必须先完成2个呼叫.但前两个AJAX调用是独立的.所以我希望它们是异步并且并行执行.

现在如何构建这些调用?我试图把它们放在相应调用的嵌套成功块中,但是那个案例前2个调用也不是独立的.

如果可能的话,请建议使用一些sudo代码.

Fel*_*ing 15

使用承诺$.when:

$.when(ajaxCall1(), ajaxCall2()).then(ajaxCall3);
Run Code Online (Sandbox Code Playgroud)

在哪里ajaxCallX是这样的

function ajaxCall1() {
    return $.ajax(...);
}
Run Code Online (Sandbox Code Playgroud)

这基本上意味着"在两者之后,承诺ajaxCall1和承诺ajaxCall2得到解决,执行功能ajaxCall3".

这是有效的,因为$.ajax(和类似的方法)返回的对象实现了promise接口.更多信息也可以在$.ajax文档中找到.


每个Ajax调用的响应都then作为参数传递给回调.你可以接受他们

$.when(ajaxCall1(), ajaxCall2()).then(function(a1, a2) {
    // a1[0] is the response of the first call
    // a2[0] is the response of the second call
    ajaxCall3(a1[0], a2[0]);
});
Run Code Online (Sandbox Code Playgroud)

$.when另请参阅另一个示例的文档.