JavaScript:排序AJAX调用
对于特定的功能,我有3个ajax调用。第三次呼叫取决于前两次呼叫,即第三次呼叫必须完成前两次呼叫。但前两个AJAX调用是独立的。所以我希望它们是异步的,并并行执行 现在如何构造这些调用?我试着把它们放在各自调用的嵌套成功块中,但在这种情况下,前两个调用也不是独立的 如果可能,请提供一些sudo代码 使用和: 其中JavaScript:排序AJAX调用,javascript,jquery,ajax,Javascript,Jquery,Ajax,对于特定的功能,我有3个ajax调用。第三次呼叫取决于前两次呼叫,即第三次呼叫必须完成前两次呼叫。但前两个AJAX调用是独立的。所以我希望它们是异步的,并并行执行 现在如何构造这些调用?我试着把它们放在各自调用的嵌套成功块中,但在这种情况下,前两个调用也不是独立的 如果可能,请提供一些sudo代码 使用和: 其中ajaxCallX类似于 function ajaxCall1() { return $.ajax(...); } 这基本上意味着“在解决了ajaxCall1的承诺和ajaxC
ajaxCallX
类似于
function ajaxCall1() {
return $.ajax(...);
}
这基本上意味着“在解决了ajaxCall1
的承诺和ajaxCall2
的承诺后,执行函数ajaxCall3
”
这是因为$.ajax
(和类似方法)返回的对象实现了promise接口。更多信息也可以在中找到
每个Ajax调用的响应都作为参数传递给
然后回调。你可以通过他们作为
$.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]);
});
查看$。当
文档中有另一个示例时。在前两个事件完成执行后,可以使用ajaxComplete调用第三个事件。ajaxComplete是一个回调事件,在每次ajaxCalls得到响应后触发。查看此链接以了解其工作原理OP可能需要前两个ajax调用的结果才能反馈到第三个ajax调用,因此您可以解释在使用此结构时如何实现。与此问题/答案类似:阅读一篇关于并行和串行ajax调用的非常好的文章我不认为这是正确的这里有用ajaxComplete
为每个完成的Ajax调用触发。因此,如果您进行两次Ajax调用,事件将触发两次。@FelixKling您可以查看ajaxComplete完成了哪个Ajax调用。所以你肯定可以使用它,它可以工作。为什么要使用ajaxComplete,而不是对你想要监视的实际ajax函数使用成功处理程序(或者对实际ajax函数使用承诺)?@jfriend00我只是说还有其他一些选项可以做到这一点。
$.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]);
});