我遇到以下代码的问题: http://jsfiddle.net/double0seven/z3Yr4/
var feedurl = "https://itunes.apple.com/nl/rss/topsongs/limit=25/xml";
var j, i, x;
$.getJSON("http://ajax.googleapis.com/ajax/services/feed/load?q=" + feedurl + "&v=1.0&num=-1&callback=?", function(data) {
for (j = 0; j < 21; j += 1) {
qt = j + ". " + data.responseData.feed.entries[j].title.replace('#', '');
console.log(qt);
li = $("<li/>").html(qt).appendTo('#ul1');
$.getJSON("http://gdata.youtube.com/feeds/api/videos?q=" + qt + "&v=2&start-index=1&max-results=1&orderby=relevance&format=5&alt=jsonc&callback=?", (function(el) {
return function(videoFeed) {
for (i = 0; i < videoFeed.data.items.length; i += 1) {
entry = videoFeed.data.items[i];
track = qt;
var liid = liid += 1;
el.empty();
el.addClass("item");
el.attr('id', i);
el.attr('ytid', entry.id);
el.attr('titel', entry.title);
newdiv = $(document.createElement("div"));
newdiv.addClass("mod");
newdiv.append("<h3>" + qt + "<br></h3>");
el.append(newdiv);
}
};
}(li)));
}
})
以下是它需要做的事情:
无法找出原因,我认为需要与另一个封闭有关。 但不确定。 我在互联网上搜索但没有任何线索。
感谢您的帮助。
答案 0 :(得分:0)
正在发生的事情是,qt-reference正在外循环的每次迭代中更新,当完成对Youtube API的第一次Ajax响应时,外部循环已经到了结尾。
您必须在每个内部Ajax请求中存储每个qt-reference,以便请求更新相关的LI。
最简单的方法是创建一个函数,该函数返回一个使用外部函数参数的函数:
var renderLi = function (qt, el) {
return function(videoFeed) {
...
};
};
...
$.getJSON("http://gdata.youtube.com/feeds/api/videos?q=" + qt + "&v=2&start-index=1&max-results=1&orderby=relevance&format=5&alt=jsonc&callback=?", renderLi(qt, li));