JavaScript:订购AJAX调用

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

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

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

使用promises和$.when

 $.when(ajaxCall1(), ajaxCall2()).then(ajaxCall3); 

其中ajaxCallX就像

 function ajaxCall1() { return $.ajax(...); } 

这基本上意味着“在两者之后, 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]); }); 

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

在前两个事件完成执行后,您可以使用ajaxComplete来调用第三个事件。 ajaxComplete是一个回调事件,在每个ajaxCalls得到响应后触发。 查看此链接以查找其工作原理https://api.jquery.com/ajaxComplete/