首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数闭包内部javascript函数闭包

函数闭包内部javascript函数闭包
EN

Stack Overflow用户
提问于 2014-04-02 14:50:13
回答 1查看 55关注 0票数 0

下面的代码出现了这个问题:http://jsfiddle.net/double0seven/z3Yr4/

代码语言:javascript
复制
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)));
    }
})

下面是它需要做的事情:

  1. 从RSS提要(works)获取标题
  2. 把它们(最多到20)放在一个无序的列表中--由nr命令。(工程)
  3. 在youtube api上搜索一个很好的视频(作品)
  4. 将一些信息放入创建的li (works)(ytid是可以的)。标题也是如此)
  5. 它需要从外部/母函数中获得变量qt才能与之匹配。但是-它总是得到行中最后一个填充的qt变量.

不知道为什么,我想需要和另一个结局有关。但不确定。我在网上到处搜索,但毫无头绪。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-02 15:16:53

正在发生的情况是,qt引用在您的外部循环中每次迭代都会被更新,当对Youtube API的第一个Ajax响应完成时,外部循环已经到达终点。

您必须用每个内部Ajax-请求存储每个qt引用,以便请求更新相关的LI。

最简单的方法是创建一个函数,该函数返回使用外部函数的参数的函数:

代码语言:javascript
复制
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));

http://jsfiddle.net/z3Yr4/24/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22815187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档