これは私を完全に混乱させました。ビデオがまだ存在するかどうかを確認するために、一連の Youtube ID を実行しようとしています。
配列にすべての ID があり、gdata API をチェックして、XML 結果または Video not found 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 の非同期性を正しく処理していないことに関係しているのでしょうか。