gpt4 book ai didi

jquery - 如何在循环中链接异步 ajax 函数

转载 作者:行者123 更新时间:2023-12-01 04:05:10 24 4
gpt4 key购买 nike

我想链接一个在循环内多次调用的异步ajax 函数。为什么?因为该功能是上传文件,但我希望它串行上传文件,而不是一次上传所有文件。我不想使用 async false,因为我希望在 DOM 上更新进度。

for (var i = 0; i < files.length; i++) {
var fd = new FormData();

fd.append('file', files[i]);
fd.append('galleryid', galleryid);

sendFileToServer(fd); //chain this function call
}

function sendFileToServer(formData)
{
var uploadURL ="includes/ajax/images/uploadImagePage.php"; //Upload URL
var extraData ={}; //Extra Data.
return jqXHR=$.ajax({
xhr: function() {
var xhrobj = $.ajaxSettings.xhr();
if (xhrobj.upload) {
xhrobj.upload.addEventListener('progress', function(event) {
var percent = 0;
var position = event.loaded || event.position;
var total = event.total;
if (event.lengthComputable) {
percent = Math.ceil(position / total * 100);
}
//Set progress
$('#uploadImageResponse').html(percent+'%');
}, false);
}
return xhrobj;
},
url: uploadURL,
type: "POST",
async:true,
contentType:false,
processData: false,
cache: false,
data: formData,
success: function(data){
status.setProgress('Upload completed. 100%.');

}
});


}

我不明白 jquery 延迟对象是如何工作的。

最佳答案

有许多不同的方法可以序列化多个这样的请求。这是一种使用手动迭代而不是 for 循环的方法,因此您只有在上一个迭代完成后才前进到下一个迭代。

手动迭代

function sendAllFiles(files) {
var index = 0;

function next() {
var fd;
if (index < files.length) {
fd = new FormData();
fd.append('file', files[index]);
fd.append('galleryid', galleryid);
++index;
// send this file and when done, do the next iteration
sendFileToServer(fd).then(next);
} else {
// all files are done now
}
}
// start the first iteration
next();
}
<小时/>

使用 .reduce() 的链式 promise

而且,这是使用 .reduce() 和链式 Promise 的不同设计模式:

files.reduce(function(p, item) {
return p.then(function() {
var fd = new FormData();
fd.append('file', item);
fd.append('galleryid', galleryid);
return sendFileToServer(fd);
});
}, $.Deferred().resolve()).then(function() {
// all files are done now
});

关于jquery - 如何在循环中链接异步 ajax 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30296970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com