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/