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

Ответы [ 3 ]

117 голосов
/ 30 августа 2009

Поскольку $.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);
});
3 голосов
/ 21 мая 2012

Надеюсь, это поможет вам ..

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 голосов
/ 30 августа 2009

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

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

...