現在、以下のコードを使用してYouTubeでの検索から最初の動画を取得していますが、docreadyが呼び出されたときに、IDが設定されていません。コードはajaxの結果が返されるのを待たず、代わりに続行して何も返しません。
ajaxでasync:falseを試しましたが、「待機」する可能性があると考えていますが、それでも何も返されません。すべてのIDが設定されるように、これをどのように修正しますか?
$(document).ready(function () {
docready();
});
function docready() {
var id1 = grabid("cat");
var id2 = grabid("dog");
var id3 = grabid("goldfish");
alert(id1);
}
function grabid(keyword) {
var url = 'http://gdata.youtube.com/feeds/api/videos?q=' + encodeURIComponent(keyword) + '&format=5&max-results=1&v=2&alt=jsonc';
$.ajax({
async: false,
type: "GET",
url: url,
dataType: "jsonp",
success: function (responseData, textStatus, XMLHttpRequest) {
if (responseData.data.items) {
var videos = responseData.data.items;
videoid = videos[0].id;
alert(videoid);
return videoid;
}
}
});
}
更新:問題を少し明確にするために、上記のコードを少し変更しました。コードが実行されると、期待どおりに実際の「videoid」が3回アラートされます。ただし、alert(id1)に到達すると、undefinedが返されます。したがって、「return videoid」は無視され、変数に戻されません。
UPDATE2はまだ解決されていません