我有该代码:
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浏览器。
这该怎么做 ?
您可以创建一个Promise数组,以便在所有Promise都解决后,您就可以运行您的all done代码。
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/)**