循环多个 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 然后附加到响应