2009-08-30 4 views
58

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?

+0

Questo sembra giusto. Il ciclo '$ .each' stampa elementi nel log, ma non li aggiunge a' list'? – Kobi

risposta

113

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

È 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.

2

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