我试图通过向https://gdata.youtube.com/feeds/api/videos/<videoID>
的HEAD请求查看已死的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 < / strong>在第一次出错后。
一旦所有请求完成,即使有错误,我该怎么办?
(最终此代码将作为书签运行,在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 failed,log 4)。这是一个错误吗?
答案 0 :(得分:0)
您只在最后一次通话中指定成功功能。
试
$.when.apply($, calls).then(function() {
console.log(deadVid);
}, function(){
//log failed
});