59
var list = [];
$.getJSON("json.js", function(data) {
    $.each(data, function(i, item) {
        console.log(item.text);
        list.push(item.text);
    });
});
console.log(list.length);

list.length常に 0 を返します。firebug で JSON を参照しましたが、整形式で、すべて問題ないようです。配列に項目を追加できないようですが、何が欠けていますか?

4

3 に答える 3

124

非同期であるため、配列にデータが入力される前にコードが起動している$.getJSONと思います。console.log(list.length);これを修正するには、console.logステートメントをコールバック内に置きます。

var list = new Array();
$.getJSON("json.js", function(data) {
    $.each(data, function(i, item) {
        console.log(item.text);
        list.push(item.text);
    });
    console.log(list.length);
});
于 2009-08-30T06:47:09.783 に答える
3

これがお役に立てば幸いです。

var list = [];
    $(document).ready(function () {
        $('#test').click(function () {
            var oRows = $('#MainContent_Table1 tr').length;
            $('#MainContent_Table1 tr').each(function (index) {
                list.push(this.cells[0].innerHTML);
            });
        });
    });
于 2012-05-21T11:00:58.313 に答える
3

非同期のajaxリクエストを作成しているため、ajaxリクエストが完了する前にリストの長さのコンソールログが発生します。

目的を達成する唯一の方法は、ajax 呼び出しを同期に変更することです。.ajax を使用して asynch : false を渡すことでこれを行うことができますが、これは呼び出しが返されるまで UI をロックするため、お勧めできません。返されない場合、ユーザーはブラウザーからクラッシュする必要があります。

于 2009-08-30T06:47:48.843 に答える