一些僞同步問題再次...如何通過錯誤處理來完成Ajax請求並檢測整體完成?
我正在尋找最佳實踐來運行一個函數,完成循環內的所有ajax請求之後。
錯誤的例子:
var files = ["file1","file2","File3"];
var success = [];
var error = [];
for (var i = 0; i < files.length; i++) {
$.ajax({
type: "HEAD",
url: files[i]
}).done(function(){
console.log("file found");
success.push(files[i]);
doThisWhenAllFilesChecked();
}).fail(function() {
console.log("file not found");
error.push(files[i]);
doThisWhenAllFilesChecked();
})
}
錯誤的例子2:同步的,只是爲了說明我正在尋找:
var files = ["file1","file2","File3"];
var success = [];
var error = [];
for (var i = 0; i < files.length; i++) {
$.ajax({
type: "HEAD",
async: false, // <-- !
url: files[i]
}).done(function(){
console.log("file found");
success.push(files[i]);
}).fail(function() {
console.log("file not found");
error.push(files[i]);
})
}
doThisWhenAllFilesChecked();
嘗試jquery $ .when(),它將在所有ajax請求完成後調用成功和錯誤回調。檢查jquery文檔以獲取更多詳細信息 – atul
謝謝! 「$ .when()」看起來很有前途,但還不知道如何在我的情況下使用它,因爲「fail()」,「done()」或「then()」沒有選項可以激發一個函數不管他們的成功或錯誤處理循環後。 我也發現了這個答案,我目前正在看:http://stackoverflow.com/a/18425082/1536850 – Elvis