我有3个ajax调用特定功能。第3个呼叫取决于前2个呼叫,即对于第3个呼叫,必须完成前2个呼叫。但前两个AJAX调用是独立的。所以我希望它们是异步并且并行执行。
现在如何构建这些调用?我试图把它们放在相应调用的嵌套成功块中,但那个案例前2个调用也不是独立的。
如果可能的话,请建议使用一些sudo代码。
答案 0 :(得分:15)
$.when(ajaxCall1(), ajaxCall2()).then(ajaxCall3);
其中ajaxCallX
类似于
function ajaxCall1() {
return $.ajax(...);
}
这基本上意味着“在两者之后,ajaxCall1
的承诺和ajaxCall2
的承诺得到解决,执行函数ajaxCall3
”。
这是有效的,因为$.ajax
(和类似方法)返回的对象实现了promise接口。更多信息也可以在$.ajax
documentation。
每个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
文档以获取另一个示例。
答案 1 :(得分:1)
在前两个事件完成执行后,您可以使用ajaxComplete来调用第三个事件。 ajaxComplete是一个回调事件,在每个ajaxCalls得到响应后触发。查看此链接以查找其工作原理https://api.jquery.com/ajaxComplete/