小编典典

如何等待直到jQuery ajax请求完成循环?

ajax

我有该代码:

for (var i = 0; i < $total_files; i++) {
  $.ajax({
    type: 'POST',
    url: 'uploading.php',
    context: $(this),
    dataType: 'json',
    cache: false,
    contentType: false,
    processData: false,
    data: data_string,
    success: function(datas) {
      //does something
    },
    error: function(e) {
      alert('error, try again');
    }
  });
}

它可以很好地上传图像,但是问题是我找不到一种逐一上传图像的方法,我试图将 async 选项 设置为false,
但是它冻结了网络浏览器,直到所有图像都被上传为止,这不是我所需要的。想要,我想以某种方式模拟此 “ async:false”
选项以执行相同的操作,但不冻结Web浏览器。

这该怎么做 ?


阅读 290

收藏
2020-07-26

共1个答案

小编典典

您可以创建一个Promise数组,以便在所有Promise都解决后,您就可以运行您的all done代码。

var promises = [];
for (var i = 0; i < $total_files; i++){ 
   /* $.ajax returns a promise*/      
   var request = $.ajax({
        /* your ajax config*/
   })

   promises.push( request);
}

$.when.apply(null, promises).done(function(){
   alert('All done')
})

**[DEMO](http://jsfiddle.net/Fx6dD/)**

2020-07-26