循环多个 JSON 请求(YouTube 数据 API)

Posted

技术标签:

【中文标题】循环多个 JSON 请求(YouTube 数据 API)【英文标题】:Looping Through Multiple JSON Requests (YouTube Data API) 【发布时间】:2011-01-21 02:09:19 【问题描述】:

我正在处理的网站的一部分是视频页面。我通过访问 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>');
         
       );
 

【问题讨论】:

我不知道是不是这个问题,但是函数的结束括号似乎不见了。 另外,不应该是 feeds.entry[j] 而不是 entry[i]? 嘿,是的,在这两个方面都是正确的。从原始来源转置时出错。我实际上得到了它的工作,并将稍后发布解决方案。不过谢谢你的评论! 【参考方案1】:

问题是,您正在使用“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>');
         
       );
 

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

【讨论】:

以上是关于循环多个 JSON 请求(YouTube 数据 API)的主要内容,如果未能解决你的问题,请参考以下文章

Youtube Data API:在单个请求中按 ID 检索多个视频条目

如何循环 RestClient 请求传递 id 然后附加到响应

无法将文件中的多个值分配给 json 请求

如何使用 json-c 格式将视频上传到 youtube?

如何将ajax请求返回的Json格式数据循环输出成table形式

jquery循环输出json数据