list.length
restituisce sempre 0. Ho sfogliato il JSON in Firebug ed è ben formato e tutto sembra a posto. Non riesco proprio ad aggiungere un elemento all'array cosa mi manca?Come aggiungere elementi a un array in jQuery?
risposta
Poiché $.getJSON
è asincrono, penso che il codice console.log(list.length);
stia sparando prima che l'array sia stato popolato. Per correggere questo mettere la sua dichiarazione console.log
all'interno il callback:
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);
});
È in corso una richiesta AJAX che è asincrona, pertanto il registro console della lunghezza della lista avviene prima della richiesta Ajax è stata completata.
L'unico modo per ottenere ciò che si desidera è cambiare la chiamata ajax in modo sincrono. È possibile farlo utilizzando il .ajax e passando in asynch: false tuttavia questo non è raccomandato in quanto blocca l'interfaccia utente fino a quando la chiamata è tornata, se non riesce a restituire all'utente deve arrestarsi in modo anomalo dal browser.
Spero che questo vi aiuterà a ..
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);
});
});
});
Questo sembra giusto. Il ciclo '$ .each' stampa elementi nel log, ma non li aggiunge a' list'? – Kobi