該代碼片段允許刪除拖入一個框中的多個文件。所述的FileReader創建的每個文件的團塊,然後將每個文件應該使用AJAX RQ被髮送到服務器:接收下一個斑點時 服務器內部崩潰而不是在處理了前一個:jquery多個Ajax請求
$.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);
}
問題。
我發現另一篇文章討論這個:How to make all AJAX calls sequential? 「連續」要求使用異步:假是不是一種選擇,它會阻止一大堆其他東西..
SOLUTION:??? 呼叫AJAX forfile1,當調用完成,調用AJAX的文件2,... AJAX調用文件-N
我真的想用JQ遞延(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。
你是否控制服務器端代碼? – Crisfole
不,我可以和控制服務器的人討論,如果你有一個想法:-)它是一個問題.. –
我唯一的想法是編寫服務器,以便它可以處理一次超過一個的事物。你可以做的另一件事是將連續調用嵌套在回調函數中(以便下一個Ajax命令僅在第一次調用成功時被調用)。如果成功並不是你想要做的唯一一次,那麼在所有'成功','失敗:','完成:'功能中都要這樣做。 (一定要在函數中包裝下一個ajax調用,所以你可以在所有需要的地方調用該函數)。 – Crisfole