此代码段允许将多个文件拖放到一个框中。文件阅读器为每个文件创建一个 blob,然后每个文件都应该使用 ajax rq 发送到服务器:
$.each( e.dataTransfer.files, function(index, file){
var fileReader = new FileReader();
//..generate BLOB from file
fileReader.onloadend = (function(file) {
return function(e) {
uploadfilelist.append('<li>' + file.fileName + '</li>');
//send every single file to server
var destfoldername=CURRENTPATH;
var uploadfilename=file.fileName;
var fd = new FormData();
fd.append("param1", destfoldername);
fd.append("param2", uploadfilename);
fd.append("param3", blob);
$.ajax({
type:"POST",
url:"url",
data:fd,
contentType: false,
processData: false,
beforeSend:function (xhr){
//custom headers
},
success: function(data, textStatus, jqXHR){
},
complete: function(jqXHR){
alert("State after complete: " + jqXHR.statusText);
}
});
};
})(file);
fileReader.readAsBinaryString(file);
}
问题:当接收到下一个 blob 而没有处理前一个 blob 时,服务器内部崩溃。
我发现另一个帖子讨论这个:如何使所有 AJAX 调用顺序? 使用 async:false 的“顺序”请求不是一种选择,它会阻止很多其他事情。
解决方案: ???为file1调用ajax,调用完成后,为file2调用ajax,...为file-n调用ajax
我真的很想使用 JQ Deferred ( http://api.jquery.com/category/deferred-object/ ),例如这里描述的:http: //api.jquery.com/jQuery.when/
$.when($.ajax(???how to refer to THIS ajax call).done(function(){
//call this ajax for the next file again or use $.ajax(code).then()?
});
我真的很抱歉,但我不知道如何做对。
感谢您的任何建议!H。