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并且它已经很好地形成了,一切看起来都很好。我似乎无法在数组中添加一个项目,我缺少什么?
答案 0 :(得分:117)
由于$.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);
});
答案 1 :(得分:3)
您正在发出异步的ajax请求,因此您的控制台日志列表长度发生在ajax请求完成之前。
实现目标的唯一方法是将ajax调用更改为同步。您可以通过使用.ajax并传入asynch:false来执行此操作,但不建议这样做,因为它会在调用返回之前锁定UI,如果它无法返回,则用户必须从浏览器中崩溃。
答案 2 :(得分:3)
希望这会对你有帮助..
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);
});
});
});