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 に答える