比方說,我有Ajax調用數組,像這樣:多個異步ajax調用:即使有一些失敗,如何解決所有調用後執行的函數?
// an array of ajax calls
var callsArray = [];
callsArray.push(
$.ajax({
url: '/url1';
cache: false,
dataType: 'html'
}),
$.ajax({
url: '/url2';
cache: false,
dataType: 'html'
})
)
我事先知道這兩個電話的至少一個會失敗。我想在BOTH調用解決成功或失敗後執行一個函數,並且我還想記錄任何失敗。
這是行不通的:
// NOT APPROPRIATE
var errors = '';
$.when.apply(null, callsArray)
.done(function() {
console.log('Both calls completed but these urls failed: ' + errors);
})
.fail(function() {
errors += this.url + ' ';
})
的問題與上面的是,即使有一個呼叫失敗是.fail執行,而.done只有零話費無法執行。另外,我不能使用.always,因爲只要解決任何呼叫,它就會執行。
所以我在尋找這樣的事情:
// FANTASY CODE
var errors = '';
$.when.apply(null, callsArray)
.allCallsResolved(function() {
// this executes only when all calls have
// returned either a success or a failure
// rather than when all calls succeed
console.log('All calls completed but these urls failed: ' + errors);
})
.everyFailure(function() {
// this executes every time a call fails
// rather than as soon as any call fails
errors += this.url + ' ';
})
$就已經返回了承諾的對象。看起來像你需要將'$'作爲第一個參數傳遞給'when.apply'而不是'null'。 –
@gp null或$無關 – charlietfl
什麼版本的jQuery?如果它是3+爲每個請求添加一個catch()' – charlietfl