我正在嘗試使用HEAD請求檢查已死的YouTube視頻,以檢查https://gdata.youtube.com/feeds/api/videos/<videoID>
。 現在的事情是,這些是快速和所有的,但他們會失敗,403和404:在.each()中多個AJAX調用,即使發生多個錯誤,也要執行一些操作
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
(= )所有,以.always
或.fail
它的第一個錯誤之後登錄。
即使出現錯誤,所有請求都完成後,我該如何處理?
(最終這個代碼將運行作爲書籤,上reddit.com $.fn.jquery -> "2.1.1"
)
編輯:這似乎可以解釋爲什麼只記錄:
- 如果所有延期被解決,執行
done
回調。 - 如果一個的延期被拒絕,請執行
fail
回調。
通過http://afgomez.es/blog/better-ajax-callbacks-with-jquery-promises/
編輯2:採用安裝在document
並登錄在所有AJAX結束全局AJAX事件處理程序.ajaxStop()
請求
$(document).ajaxStop(function() {
console.log(deadVid);
});
編輯3:使用。總是()已被建議,但它不會爲我工作......它會在第一次錯誤後觸發。我在Chrome 38上,但是當我嘗試使用Firefox 33時,它按預期工作,在所有AJAX請求完成後(1 OK和4失敗,日誌4),日誌。這是一個錯誤?
當然失效可以通過過程中途發生的呢?按照Andy的說法,用'always'代替'then'。 – 2014-10-31 09:37:05
的確......總是比較安全的! – Bosken85 2014-10-31 10:19:43