我在处理多个 jquery ajax 调用时遇到一些问题,出现超时错误,但我如何知道这是哪个请求错误?
$.when(ajaxDeferred1, ajaxDeferred2)
.done(function(result1, result2) {})
.fail(function(response, statusText) {
// how do I know which(ajaxDeferred1 or ajaxDeferred2) ajax call error this is?
});
ajaxDeferred1
$.ajax({
method: 'GET',
url: xxx,
timeout: 5000,
});
我知道我可以通过在每个请求上放置“.fail()”来处理错误,但是有什么方法可以处理上述错误吗?
再进一步,我可以这样处理吗?
$.when(ajaxDeferred1, ajaxDeferred2)
.done(function(result1, result2) {})
.fail(function(errorForRequest1, errorForRequest2) {
// handle error
});
编辑:
我想我需要把我的问题说得更清楚。在上面的例子中:
$.when(ajaxDeferred1, ajaxDeferred2)
.done(function(result1, result2) {})
.fail(function(errorForRequest1, errorForRequest2) {
// if all request has done, but one or more request has got error, return the error here then!
// So I can handle which part UI should show and which UI part I should hide due to the error!
});
我希望在所有操作都完成且没有错误的情况下获得“完成”结果,并在所有操作完成但一个或多个请求遇到问题时获得“错误”结果,并将它们全部返回到“.失败()'。
最佳答案
您可以使用 .always()
并在其中迭代每个 Promise 并检查它是否已解决或失败。
var promises = [ajaxDeferred1, ajaxDeferred2]
$.when.apply($, promises)
.always(function() {
$.each(promises, function(i) {
this.done(function(result) {
console.log('promise', i, 'resolved');
}).fail(function(error) {
console.log('promise', i, 'failed');
});
});
});
JSFiddle 演示:https://jsfiddle.net/pr45eov1/3/
关于javascript - 如何使用Deferred处理多个ajax请求错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44621310/