2009-08-30 26 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 luôn trả về 0. Tôi đã duyệt JSON trong firebug và nó được định dạng tốt và mọi thứ đều ổn. Tôi chỉ có thể không có vẻ để thêm một mục vào mảng những gì tôi đang mất tích?Làm cách nào để thêm các mục vào một mảng trong jQuery?

+0

Điều này có vẻ đúng. Vòng lặp '$ .each' có in các bản ghi vào nhật ký, nhưng không thêm chúng vào' danh sách' không? – Kobi

Trả lời

113

$.getJSON không đồng bộ, tôi cho rằng mã console.log(list.length); của bạn đang kích hoạt trước khi mảng của bạn được điền. Để khắc phục này đưa tuyên bố console.log của bạn bên trong gọi lại của bạn:

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

Bạn đang làm cho một yêu cầu ajax mà là không đồng bộ do đó giao diện điều khiển đăng nhập của bạn của độ dài danh sách xảy ra trước khi yêu cầu ajax đã hoàn thành.

Cách duy nhất để đạt được những gì bạn muốn là thay đổi cuộc gọi ajax thành đồng bộ. Bạn có thể làm điều này bằng cách sử dụng .ajax và truyền vào asynch: false tuy nhiên điều này không được khuyến khích vì nó khóa giao diện người dùng cho đến khi cuộc gọi đã quay trở lại, nếu không trả lại người dùng phải thoát khỏi trình duyệt.

2

Hy vọng điều này sẽ giúp bạn ..

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); 
      }); 
     }); 
    }); 
Các vấn đề liên quan