web-dev-qa-db-ja.com

jQueryで配列に項目を追加するにはどうすればよいですか?

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を参照しましたが、整形式であり、すべて正常に見えます。何が欠けているのか、配列にアイテムを追加できないようです。

58
NATO24

$.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);
});
117
Derek Swingley

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

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

3
redsquare

これがあなたを助けることを願っています。

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);
            });
        });
    });
3
aji