我在处理多个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!
});
我想完成'结果一切都没有错误,并得到错误'当所有完成但是一个或多个请求遇到问题并将它们全部一起返回到' .fail()'。
答案 0 :(得分:1)
您可以使用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');
});
});
});
并在其中迭代每个承诺并检查它是否已解决或失败。
{{1}}
JSFiddle演示:https://jsfiddle.net/pr45eov1/3/
答案 1 :(得分:1)
我喜欢@Miguel Mota的回答。但作为替代方案,如果失败,您将获得延迟对象。所以你可以添加一些数据:
var dfd1 = jQuery.ajax({
method: 'GET',
url: 'some request that fails first',
timeout: 1
});
dfd1.id = 1;
var dfd2 = jQuery.ajax({
method: 'GET',
url: 'some request that fails second',
timeout: 1000
});
dfd2.id = 2;
jQuery.when(dfd1, dfd2)
.done(function () { })
.fail(function (request) {
// id: 1
console.log('id: ' + request.id);
});