Pergunta

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 Sempre retorna 0. Eu naveguei no JSON no Firebug e ele está bem formado e tudo parece bem. Eu simplesmente não consigo adicionar um item à matriz o que estou perdendo?

Foi útil?

Solução

Desde $.getJSON é assíncrono, eu acho que você console.log(list.length); O código está disparando antes que sua matriz seja preenchida. Para corrigir isso, coloque o seu console.log Declaração dentro do seu retorno de chamada:

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

Outras dicas

Você está fazendo uma solicitação AJAX que é assíncrona, portanto, o seu log do console do comprimento da lista ocorre antes que a solicitação do AJAX seja concluída.

A única maneira de alcançar o que você deseja é alterar a chamada do Ajax para ser síncrona. Você pode fazer isso usando o .ajax e passando assíncula: false, no entanto, isso não é recomendado, pois ele bloqueia a interface do usuário até que a chamada retorne, se não retornar, o usuário precisará travar do navegador.

Espero que isso te ajude ..

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);
            });
        });
    });
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top