這讓我完全困惑。我試圖通過一系列的YouTube ID來檢查視頻是否仍然存在。檢查與jquery/ajax存在的網址
我有一個數組中的所有ids,並希望檢查gdata api,看看我是否得到XML結果或視頻未找到404消息。
我在SO上找到了一個函數來檢查每個id並向表中添加一行。
var ytarray = ARRAY OF YOUTUBE IDs
var yttitles = ARRAY OF MATCHING TITLES FOR THE VIDS
var urlExists = function(url, callback){
$.ajax({
type: 'HEAD',
url: url,
success: function() {
callback(true);
},
error: function() {
callback(false);
}
});
}
var length = ytarray.length,
for (var i = 0; i < length; i++) {
urlExists('http://gdata.youtube.com/feeds/api/videos/'ytarray[i], function(success) {
if (success) {
$('#rows').append('<tr><td>'+yttitles[i]+'</td><td>'+ytarray[i]+'</td><td style="color: green">Found</td></tr>');
} else {
$('#rows').append('<tr><td>'+yttitles[i]+'</td><td>'+ytarray[i]+'</td><td style="color: red">Not Found</td></tr>');
}
});
};
});
});
該表格已填滿,但所有行都包含最後一個視頻的信息,而不是每個視頻在循環中的信息。
用警報進行測試,似乎在所有for循環完成之前表格沒有被填寫。
我想知道這是否與我沒有正確處理AJAX的異步性質?
這就像一個夢一樣!我不認爲我會爲自己工作。你在這裏做的任何解釋都會非常有用。 – DaveR 2013-05-04 19:23:41
剛給了它一個小小的結構,在循環中添加了一個clousure,並且從ajax函數返回了延期的承諾,按照它的意圖使用它。 – adeneo 2013-05-04 19:25:11