2009-08-30 90 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總是返回0.我瀏覽過firebug中的JSON,它的格式良好,一切看起來都很好。我似乎無法將一個項目添加到數組中,我錯過了什麼?如何將項目添加到jQuery中的數組?

+0

這似乎是正確的。 '$ .each'循環是否將項目打印到日誌中,但是不會將它們添加到'list'中? – Kobi 2009-08-30 06:42:33

回答

113

由於$.getJSON是異步的,我認爲你的console.log(list.length);代碼在你的數組被填充之前觸發。要糾正此把你的console.log聲明回調中:

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

你正在一個Ajax請求是異步的,因此Ajax請求完成之前發生的名單長度的控制檯日誌。

實現你想要的東西的唯一方法是將ajax調用改爲同步。您可以通過使用.ajax並傳入異步來完成此操作:false但是不推薦這樣做,因爲它將用戶界面鎖定直到調用返回,如果用戶無法返回,用戶必須崩潰到瀏覽器外。

2

希望這將幫助你..

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