这让我完全困惑。我正在尝试浏览一系列 Youtube id 以检查视频是否仍然存在。
我有一个数组中的所有 id,并想检查 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 的异步特性有关?