javascript - .each()中的多个AJAX调用,即使有多个错误,也要一劳永逸

标签 javascript jquery ajax youtube

我正在尝试检查HEAD请求https://gdata.youtube.com/feeds/api/videos/<videoID>的YouTube死视频。
现在,这些都是快速而全部的,但是它们将以403和404失败:

HEAD https://gdata.youtube.com/feeds/api/videos/XmQR4_hDtpY 404 (Not Found)



这些错误似乎使事情变得困惑。

我找到了Multiple ajax calls inside a each() function.. then do something once ALL of them are finished? - Stack Overflow并尝试使用this answer:

var videoIDs = ['a9KvHnHQVTc', 'XmQR4_hDtpY', 'WelBUaf5qsw', 'Mcrt9LJkGT4', 'P9qTLa2DVR8'];
var calls = [];
var deadVids = [];

$.each(videoIDs, function(index, value) {
    calls.push($.ajax({
        type: "HEAD",
        url: "https://gdata.youtube.com/feeds/api/videos/" + value,
        error: function() {
            deadVids.push('https://www.youtube.com/watch?v=' + value + " is dead!");
        }
    }));
});

$.when.apply($, calls).always(function(){
     console.log(deadVids.length);
   });

使用.then,它根本不会记录deadVids.length(= 4 ),而使用.always.fail,则它会在第一个错误之后记录 1

所有请求完成后,即使有错误,我该怎么办?

(最终,此代码将在reddit.com $.fn.jquery -> "2.1.1"上作为书签运行。)

编辑:这似乎可以解释为什么它只记录 1 :
  • 如果所有的都得到解决,则执行done回调。
  • 如果拒绝了其中一个递延的,则执行fail回调。

  • 通过http://afgomez.es/blog/better-ajax-callbacks-with-jquery-promises/

    编辑2:使用附加到.ajaxStop()的全局Ajax事件处理程序document会在所有AJAX请求结束时记录 4

    $( document ).ajaxStop(function() {
      console.log(deadVid);
    });
    

    编辑3 :建议使用.always(),但它对我不起作用...它将在第一个错误后触发。我使用的是Chrome 38,但是当我尝试使用Firefox 33时,它可以按预期工作,在完成所有AJAX请求后记录日志(1个OK和4个失败,记录4个)。这是一个错误吗?

    最佳答案

    您仅在上次调用时指定成功功能。
    尝试

    $.when.apply($, calls).then(function() {
            console.log(deadVid);
    }, function(){
      //log failed
    });
    

    关于javascript - .each()中的多个AJAX调用,即使有多个错误,也要一劳永逸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26671328/

    相关文章:

    javascript - 在AngularJS中的服务中的函数之间传递变量

    javascript - 构建、修改、输出 Javascript 数组

    javascript - jQuery 只工作一次? jsFiddle 已附

    jquery - Bootstrap 事件选项卡颜色仅在一个选项卡上更改

    jquery - 找到某个元素覆盖的每个 DOM 元素?

    javascript - C# JSON 字符串到 JavaScript 数组

    javascript - 通过 AJAX 向 PHP 发送多组复选框

    python - Flask Python,试图将列表或字典返回给 Ajax 调用

    javascript - HTTP PUT 的目的是什么?

    Javascript/JQuery 嵌套 if 语句无法正常工作