0

我正在尝试使用 jQuery 函数中的匿名函数在 JavaScript 中填充数组,getJSON()如下所示。

$(document).ready(function() {

    function Link(url, title) {
        this.url = url;
        this.title = title;
    }
    var links = [];

    $.getJSON("http://reddit.com/r/programming/.json?jsonp=?", function(data) {
        $.each(data.data.children, function(i, item) {
            var title = item.data.title;
            var url = item.data.url;

            links.push(new Link(url, title));
        })
    });

    for(var i=0; i< links.length; i++) {
        var output = "<a href='" + k + "'>" + links[k] + "</a>";
        $('<p>' + link + '</p>').appendTo('#content');
    }

});

但是,当我点击 for 循环时,链接数组显示为空。这里发生了什么?

4

3 回答 3

3

试试看:

    $(document).ready(function() {

        function Link(url, title) {
            this.url = url;
            this.title = title;
        }

        $.getJSON("http://reddit.com/r/programming/.json?jsonp=?", function(data) {
            var links = [];
            $.each(data.data.children, function(i, item) {
                var title = item.data.title;
                var url = item.data.url;

                links.push(new Link(url, title));
            })
            for(var i=0; i< links.length; i++) {
                var output = "<a href='" + k + "'>" + links[k] + "</a>";
                $('<p>' + link + '</p>').appendTo('#content');
            }
        });


    });

您的循环可能在您的回调之前执行;)

于 2012-06-05T03:33:53.690 回答
3

那是因为$.getJSON是异步方法。即使在$.getJSON到达for循环之后代码执行也会继续,此时您的异步请求尚未完成。您应该在$.getJSON.

于 2012-06-05T03:35:16.663 回答
1

这个 jsFiddle http://jsfiddle.net/cArYg/2/显示了在 getJson 回调之前发生的迭代

于 2012-06-05T03:39:32.410 回答