javascript - 如何使用Deferred处理多个ajax请求错误?

标签 javascript jquery

我在处理多个 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/

相关文章:

javascript - 为什么我的 crypto.sublte.digest 实现会产生等长字符串的等价十六进制哈希值?

javascript - 使用 Knockout JS 进行数据绑定(bind)不起作用

javascript - rivets.js:使用 init View 中的数据预填充模型

javascript - 类型检查与空检查

javascript - 输入文件点击 Chrome

javascript - 验证,它是如何在 jquery 中进行的

javascript - "match is null"仅在服务器 - jQuery 1.x

php - ASP.net 调用 javascript,然后将值返回给后面的代码

出现 Javascript/Jquery onclick 定义的单词

php - Javascript 到 PHP 而不是使用 Ajax?