59
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,它的格式很好,一切看起来都很好。我似乎无法将项目添加到数组中我错过了什么?

4

3 回答 3

124

由于$.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);
});
于 2009-08-30T06:47:09.783 回答
3

您正在发出一个异步的 ajax 请求,因此列表长度的控制台日志发生在 ajax 请求完成之前。

实现您想要的唯一方法是将 ajax 调用更改为同步。您可以通过使用 .ajax 并传入 asynch : false 来执行此操作,但是不建议这样做,因为它会锁定 UI,直到调用返回,如果调用失败,用户必须从浏览器中崩溃。

于 2009-08-30T06:47:48.843 回答
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);
            });
        });
    });
于 2012-05-21T11:00:58.313 回答