JavaScript ajax调用for循环并维护响应顺序 for(变量i=0;i

JavaScript ajax调用for循环并维护响应顺序 for(变量i=0;i,javascript,closures,Javascript,Closures,如果传递的值为2,我将API响应设置为延迟10秒,因此2的响应会延迟。是否有任何方法可以在不同步ajax调用的情况下同步调用?API只是回显值,我得到的响应是随机的,最后是2。我的期望目标是实现输出为01234 您可以使用和执行此操作: var递延=[]; 对于(变量i=0;i

如果传递的值为2,我将API响应设置为延迟10秒,因此2的响应会延迟。是否有任何方法可以在不同步ajax调用的情况下同步调用?API只是回显值,我得到的响应是随机的,最后是2。我的期望目标是实现输出为
01234

您可以使用和执行此操作:

var递延=[];
对于(变量i=0;i<5;i++){
(功能(val){
var dfd=$.Deferred();
$.get('http://x.com/androidapi/clou.php?value='+val,函数(数据){
解析(数据);
}));
延迟推送(dfd);
})(一)
}
$.when.apply(null,deferreds).done(function(){console.log.apply(console,arguments)});

Fiddle:

要么先执行一个请求,然后执行另一个请求,而不是同时执行所有请求,要么查看jquery$。当在前一个请求的回调函数中发送下一个AJAX请求时。谢谢,但是还有其他方法不必使用额外空间(数组)吗?
for (var i = 0; i < 5; i++) {
    (function(val) {
        $.get('http://x.com/androidapi/clou.php?value=' + val, function(data) {
            console.log(data)
        })
    })(i)
}
var deferreds = [];

for (var i = 0; i < 5; i++) {
  (function(val) {
    var dfd = $.Deferred();
    $.get('http://x.com/androidapi/clou.php?value=' + val, function(data) {
      dfd.resolve(data);
    }));
    deferreds.push(dfd);
  })(i)
}

$.when.apply(null, deferreds).done(function(){ console.log.apply(console, arguments)});