JSON文件没有正确加载到变量

时间:2015-10-02 21:09:05

标签: javascript jquery json

我目前正在尝试将我的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。

1 个答案:

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