比方说,我有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