【发布时间】:2020-02-06 02:09:14
【问题描述】:
我正在使用表单字段上传多个文件
<input type="file" accept="image/jpeg, image/png" multiple
一个循环将所有文件发送到上传函数
// Upload photo function
var upload = function (photo, callback) {
var formData = new FormData();
formData.append('photo', photo);
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState === 4) {
callback(request.response);
}
}
request.open('POST', 'upload.php');
request.responseType = 'json';
request.send(formData);
};
for (var i = 0; i < files.length; i++) {
upload(resizedFile, function (response) { });
}
如果所有文件都上传成功,想重定向..
//all files finished, go to ...
if(response !== null && typeof response !== 'object') var response = JSON.parse(response);
window.location.href = "my-new-url.php?id="+response.id;
我的问题,重定向是在所有上传完成之前完成的。如何让脚本等待所有 xmlhttprequests 完成?
编辑
我把上传功能改成这样,用 jQuery 上传。该函数在for循环中被多次调用,那么如何等待所有循环/jquery调用完成,然后重定向?
function upload (photo, callback) {
var fd = new FormData();
fd.append('photo',photo);
return $.ajax({
url: 'upload.php',
type: 'post',
data: fd,
contentType: false,
processData: false,
success: function(response){
},
});
};
【问题讨论】:
-
为每个请求创建一个promise,然后使用
Promise.all()等待所有请求。 -
怎么做?
标签: javascript jquery upload xmlhttprequest photo