0

YouTube 動画のさまざまなプロパティを使用して配列を設定しようとしています (これは余計なことだと思われるかもしれませんが、将来的には他のソースを追加する予定です)。これらの値を JSON リクエスト内の配列に追加することはできますが、いったんそれから抜け出すと、それらは消えてしまいます。何か案は?

var socialPosts = new Array(); 
$.getJSON('https://gdata.youtube.com/feeds/api/videos?author=google&max-results=5&v=2&alt=jsonc&orderby=published', function(data) {
    for(var i=0; i<data.data.items.length; i++) { //for each YouTube video in the request
        socialPosts[i]={date:Date.parse(data.data.items[i].uploaded), title:data.data.items[i].title,source:"YouTube", thumbnail:data.data.items[i].thumbnail.hqDefault, url:'http://www.youtube.com/watch?v=' + data.data.items[i].id}; //Add values of YouTube video to array
    }
    console.log(socialPosts[0].date); //This returns the correct data
});
console.log(socialPosts[0].date); //This returns with undefined
4

2 に答える 2

2

まだ返されていないasynAjax呼び出しの結果にアクセスしようとしています。コールバック関数で結果を使用するか、結果を何らかの関数に渡す必要があります。

var socialPosts = new Array(); 
$.getJSON('https://gdata.youtube.com/feeds/api/videos?author=google&max-results=5&v=2&alt=jsonc&orderby=published', function(data) {
    for(var i=0; i<data.data.items.length; i++) { //for each YouTube video in the request
        socialPosts[i]={date:Date.parse(data.data.items[i].uploaded), title:data.data.items[i].title,source:"YouTube", thumbnail:data.data.items[i].thumbnail.hqDefault, url:'http://www.youtube.com/watch?v=' + data.data.items[i].id}; //Add values of YouTube video to array
    }
    console.log(socialPosts[0].date); //This returns the correct data
    somefun(socialPosts[0].date); 
});
于 2013-06-05T10:44:32.340 に答える
0

これは Ajax 関数であり、呼び出しが完了する前にクロージャーの外側のコードが実行されることを意味する非同期で発生するためです。

于 2013-06-05T10:44:43.893 に答える