循环使用多个JSON请求(YouTube Data API)

时间:2010-02-25 16:16:37

标签: javascript jquery json youtube youtube-api

我正在处理的网站的一部分是视频页面。我是通过访问YouTube数据API从YouTube帐户中提取视频的。不按特定顺序抓取视频并且没有排序工作正常,但是当我尝试将它们分类到类别时,我开始遇到麻烦。让我们说有三个类别,水果,蔬菜,宠物。我不想一次抓取所有视频,而是抓住所有标记为Fruit的视频,将它们附加到<ul id="Fruit">。然后请求所有标有蔬菜等的视频

开始时,我在收到请求后发出浏览器警报,然后附加相应的列表。在我取出警报后,它仍然有效,但不是我预期的方式。要么循环进展太快,要么根本没有前进,但我似乎无法发现错误。最终发生的事情是所有视频都放入一个列表<ul id="Vegetable">

请注意:我使用的是一个名为jGFeed的插件,它包装了jQuery getJSON函数,所以我相信你可以这样对待它。

 var videoCategories = ['Fruit', 'Vegetable', 'Pets'];

 for (var i = 0; i < videoCategories.length; i++) {
    var thisCategory = videoCategories[i];
    $.jGFeed('http://gdata.youtube.com/feeds/api/users/username/uploads?category='+thisCategory,
    //Do something with the returned data
    function(feeds) {
       // Check for errors
       if(!feeds) {
         return false;
       } else {
         for(var j=0; j < feeds.entries.length(); j++) {
            var entry = feeds.entries[i];
            var videoUrl = entry.link;
            $('ul#'+thisCategory).append('<li><a href="#" id="'+videoUrl+'">'+entry.title+'</a></li>');
         }
       });
 }

1 个答案:

答案 0 :(得分:3)

问题是,您正在使用'thisCategory'变量来设置类别名称。问题是,当您等待服务器的响应时,此变量的值会发生变化。

您可以尝试将整个脚本放在函数中:

var videoCategories = ['Fruit', 'Vegetable', 'Pets'];

for (var i = 0; i < videoCategories.length; i++) {
    getCategory(videoCategories[i]);
}

function getCategory(thisCategory)
{

    $.jGFeed('http://gdata.youtube.com/feeds/api/users/username/uploads?category='+thisCategory,
    //Do something with the returned data
    function(feeds) {
       // Check for errors
       if(!feeds) {
         return false;
       } else {
         for(var j=0; j < feeds.entries.length(); j++) {
            var entry = feeds.entries[i];
            var videoUrl = entry.link;
            $('ul#'+thisCategory).append('<li><a href="#" id="'+videoUrl+'">'+entry.title+'</a></li>');
         }
       });
 }

我没有测试过这个,所以我不确定它是否有效..