我对特定功能有3个ajax调用。第三通话取决于前两个通话,即对于第三通话,必须完成前两个通话。但是前两个AJAX调用是独立的。因此,我希望它们异步并并行执行。
现在如何组织这些电话?我试图将它们放在各个调用的嵌套成功块中,但是前两个调用也不是独立的。
如果可能,请提出一些sudo代码。
使用诺言和$.when:
$.when
$.when(ajaxCall1(), ajaxCall2()).then(ajaxCall3);
在哪里ajaxCallX像
ajaxCallX
function ajaxCall1() { return $.ajax(...); }
这基本上意味着“在解决了诺言ajaxCall1和诺言之后ajaxCall2,执行功能ajaxCall3”。
ajaxCall1
ajaxCall2
ajaxCall3
之所以可行,是因为$.ajax(和类似方法)返回的对象实现了promise接口。也可以在$.ajax文档中找到更多信息。
$.ajax
每个Ajax调用的响应都then作为参数传递给回调。您可以将它们作为
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文档中的另一个示例。