我目前正在尝试将我的JSON文件加载到我的JavaScript文件中。
我做了很多关于尝试理解我应该做什么以及如何让它工作的研究,但是我无法将其正确加载到变量中。
这是我的JSON文件的内容:
[
{
"id": 0,
"name": "Valley of Trials",
"desc": "Hello world",
"choices": []
},
{
"id": 1,
"name": "Valley of Trials",
"desc": "",
"choices": []
}
]
我正在加载并调用它:
var jsonLocations;
$.getJSON("../html/data.json", callbackFuncWithData);
function callbackFuncWithData(data) {
jsonLocations = data;
}
console.log(jsonLocations[0].name);
我在这个网站上的一个问题中读到它需要以这种方式加载,否则由于异步调用,变量不会被分配数据。但是,在firefox中打开文件(使用firebug)时,我收到一条错误消息:TypeError:jsonLocations未定义。
然而,在firebug的监视列表中,它给了我所有变量的概要,我可以打开jsonLocations,它将显示一个包含数组,对象和属性的树层次结构。
那么为什么我会收到此错误?当然,如果firebug显示jsonLocations已加载我的数据,它应该显示在console.log语句中吗?
请告诉我我的代码有什么问题。
谢谢,Joeb。
答案 0 :(得分:2)
在您的代码中,console.log(jsonLocations[0].name);
行被触发后会立即执行$.getJSON
行。它不会等到AJAX请求实际完成。
为确保在获取数据后进行记录,您需要将其移至回调函数中:
var jsonLocations;
$.getJSON("../html/data.json", function callbackFuncWithData(data) {
jsonLocations = data;
console.log(jsonLocations[0].name);
});