Подтвердить что ты не робот

Как добавить элементы в массив в 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. Я просматривал JSON в firebug, и он хорошо сформировался, и все выглядит нормально. Я просто не могу добавить элемент в массив, что мне не хватает?

4b9b3361

Ответ 1

Так как $.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);
});

Ответ 2

Вы делаете запрос ajax, который является асинхронным, поэтому ваш журнал консоли длины списка возникает до завершения запроса ajax.

Единственный способ добиться того, что вы хотите, - это изменить вызов ajax на синхронный. Вы можете сделать это, используя .ajax и переходя в asynch: false, но это не рекомендуется, поскольку он блокирует пользовательский интерфейс до тех пор, пока вызов не вернется, если он не сможет вернуть пользователя, он должен выйти из браузера.

Ответ 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);
            });
        });
    });