读取JSON文件后,javascript无法迭代数组

时间:2015-02-05 07:55:56

标签: javascript jquery arrays json

我是javascript的新手。我有简单的json文件读取问题。这是示例代码。

   function readJson() {
        $.getJSON('./resources/json/comments_type.json', function(data) {
            $.each(data, function(index, comment) {
                tempList.push(comment);
            });
        });



        for(var i = 0 ; i<tempList.length;i++)
        {
            console.log(tempList[i].text);
        }

    }

这里我试图在从JSON文件读取后迭代tempList数组。但是console.log没有显示任何内容。但如果我尝试console.log(tempList)它就有效。 tempList是一个全局变量。我从另一个函数调用readJson函数。 JSON文件保存在此处JSON file

2 个答案:

答案 0 :(得分:1)

在实际获取任何数据之前,您似乎正在运行for循环,因为$ .getJSON是异步的。因此,尝试将迭代器循环移动到$ .getJSON回调。

function readJson() {
    $.getJSON('./resources/json/comments_type.json', function(data) {
        $.each(data, function(index, comment) {
            tempList.push(comment);
        });

        //Here you should have the list
        for(var i = 0 ; i<tempList.length;i++)
        {
            console.log(tempList[i].text);
        }
    });
}

答案 1 :(得分:0)

readJSON函数是异步调用的。这意味着当你已经开始使用tempList的console.log内容时,它正在从url(在另一个线程中)加载JSON。下载后请确保您已阅读临时列表。它通常通过回调来完成。或者你可以使这个请求同步(但这是错误的方法)。

function readJson() {
    $.getJSON('./resources/json/comments_type.json', function(data) {
        $.each(data, function(index, comment) {
            tempList.push(comment);
        });
       for(var i = 0 ; i<tempList.length;i++)
       {
          console.log(tempList[i].text);
       }
    });     
 }

试试这种方式。你应该得到打印清单。您还可以将回调传递给readJson函数:

    function readJson(callback) {
    $.getJSON('./resources/json/comments_type.json', function(data) {
        $.each(data, function(index, comment) {
            tempList.push(comment);
        });
       callback();
    });     
 }

然后代码中的其他地方:

readJson(function(){
    for(var i = 0 ; i<tempList.length;i++)
       {
          console.log(tempList[i].text);
       }
});