我是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
答案 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);
}
});