我正在处理的网站的一部分是视频页面。我是通过访问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>');
}
});
}
答案 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>');
}
});
}
我没有测试过这个,所以我不确定它是否有效..