在jQuery中一个接一个地执行未知数量的Ajax请求

时间:2014-07-04 08:27:54

标签: jquery ajax

我是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
  }));
});

4 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:-1)

您可以设置async: falseDocs