Como adiciono itens a uma matriz no jQuery?
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?
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);
});
});
});