【问题标题】:Performing unknown number of Ajax requests in jQuery one after another在jQuery中一个接一个地执行未知数量的Ajax请求
【发布时间】:2014-08-25 12:46:46
【问题描述】:

我是JS新手,如有错误请见谅。

我在一个数组中有一个“未知”数量的 URL,我必须使用 Ajax 来获取它们,但不是异步的。我希望它们一个接一个地被检索,但我当前的代码会同时触发所有内容。

感谢您提供任何帮助 - 我当前的代码如下所示:

urls = ["http://www.google.com/", "http://www.yahoo.com", "http://www.bing.com"] // the number of urls in this array changes

var gets = []

$.each(urls, function(index, url) {
  gets.push($.ajax({
    url: url
  }));
});

【问题讨论】:

标签: jquery ajax


【解决方案1】:

因为ajax返回一个promise,你可以在下一次调用中链式获取结果。

var urls = ["http://www.google.com/", "http://www.yahoo.com", "http://www.bing.com"]

(function(arrayurls, index) {
  if(index >= arrayurls.length) return;
  var url = arrayurls[index];
  var thisfunction = arguments.callee;
  $.ajax({ url: url }).done(function(result) {
     //Do something with the result.
     thisfunction(arrayurls, index + 1) // Reinvoke the function over different arguments.
  });
})(urls, 0);

命名变体摆脱arguments.callee

var handle = function(arrayurls: string[], index: number) {
  if(index >= arrayurls.length) return;
  var url = arrayurls[index];
  $.ajax({ url: url }).done(function(result) {
     //Do something with the result.
     handle(arrayurls, index + 1) // Reinvoke the request over the next URL arguments.
  });
};
handle(urls, 0);

如果在进行此调用时 url 的数量会随时间变化,您可以随时使用 urls.slice(0) 复制 url 数组;

【讨论】:

    【解决方案2】:

    看看:https://stackoverflow.com/a/4785886/2561834。您需要一个类/函数来处理您的请求堆栈。

    【讨论】:

      【解决方案3】:

      您可以通过 ajax 调用传递 async=false 参数。这使得下一个 ajax 调用要等到上一个调用完成。下面的代码应该可以工作:

      $.ajax({
              url : url,
              type : "get",
              async : false,
              success : function(data) {
                      your logic
              }
          });
      

      【讨论】:

      • 谢谢,但是 async: false 会锁定整个浏览器,所以事实并非如此。对不起
      【解决方案4】:

      您可以设置async: falseDocs.

      【讨论】:

        猜你喜欢
        • 2020-09-06
        • 1970-01-01
        • 1970-01-01
        • 2019-12-24
        • 2018-07-12
        • 1970-01-01
        • 2016-12-02
        • 2017-02-13
        • 1970-01-01
        相关资源
        最近更新 更多