【问题标题】:JavaScript : Ordering AJAX callsJavaScript:排序 AJAX 调用
【发布时间】:2014-02-16 04:53:45
【问题描述】:

我有 3 个特定功能的 ajax 调用。第 3 次调用取决于前 2 次调用,即对于第 3 次调用,前 2 次调用必须完成。但是前 2 个 AJAX 调用是独立的。所以我希望它们是异步的并并行执行。

现在如何组织这些调用?我试图将它们放在各自调用的嵌套成功块中,但在这种情况下,前 2 个调用也不是独立的。

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

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

使用promises$.when

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

ajaxCallX 类似于

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

这基本上意味着“在ajaxCall1的promise和ajaxCall2的promise都解决之后,执行函数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 文档以获取另一个示例。

【讨论】:

  • OP 可能需要前两个 ajax 调用的结果才能输入到第三个调用中,所以也许您可以解释在使用这种结构时如何实现这一点。
【解决方案2】:

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

【讨论】:

  • 我认为这在这里没有用。 ajaxComplete每个 完成的 Ajax 调用触发。因此,如果您进行两次 Ajax 调用,该事件将被触发两次。
  • @FelixKling 您可以查看使用 ajaxComplete 完成的 ajax 调用。所以你绝对可以使用它并且它有效。
  • 为什么要使用 use ajaxComplete 而不是只对要监控的实际 ajax 函数使用成功处理程序(或在实际 ajax 函数上使用 promise)?
  • @jfriend00 我只是说还有其他一些选项可以做到这一点。
猜你喜欢
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
相关资源
最近更新 更多