2009-08-30 10 views
58
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 zawsze zwraca 0. Przeglądałem JSON w firebug i jest dobrze uformowany i wszystko wygląda dobrze. Po prostu nie mogę dodać elementu do tablicy, czego mi brakuje?Jak dodać elementy do tablicy w jQuery?

+0

ta wydaje się słuszna. Czy pętla '$ .each' drukuje elementy do dziennika, ale nie dodaje ich do' list'? – Kobi

Odpowiedz

113

Od $.getJSON jest async, myślę, że twój console.log(list.length); kod jest zwalniania przed tablica została wypełniona. Aby rozwiązać ten umieścić swoje oświadczenie console.log wewnątrz zwrotnego:

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

Robisz żądania AJAX, która jest asynchroniczny dlatego Twój dziennik konsola od długości listy występuje przed żądanie ajax została zakończona.

Jedynym sposobem na osiągnięcie tego, co chcesz, jest zmiana wywołania ajaxowego na synchroniczny. Możesz to zrobić za pomocą .ajax i przekazując asynch: false, ale nie jest to zalecane, ponieważ blokuje interfejs użytkownika do czasu, aż połączenie zostanie zwrócone, jeśli nie powróci, użytkownik musi zawiesić się z przeglądarki.

2

Nadzieja to pomoże ..

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