0

我是脚本和网络世界的新手,一直在努力解决我一直遇到的问题。我正在从本地 JSON 文件中读取数据,并且已经能够成功使用 jQuery.getJSON 和 jQuery.parseJSON,但是我试图在 getJSON 回调函数之外使用数据并且遇到了问题。我认为归结为我没有完全理解执行此操作的正确方法,这就是我寻求您帮助的地方。这是我的代码:

var names = new Array();

$.getJSON('ferries.json', function(data) {
  var jsondata = $.parseJSON(JSON.stringify(data));

  var length = jsondata.nodes.length;
  for (var i = 0; i < length; i++) {
    names[i] = String(jsondata.nodes[i].name);
  }
});

console.log('Names: ' + names[0]);

最后一行返回未定义。如果我要在 for 循环之后立即编写该行,它将返回所需的值。JSON文件的结构如下:

{
  "nodes":[
    {
      "name":"John"
    },

    ...

    {
      "name":"Joe"
    }
  ]
}

任何帮助将不胜感激 - 谢谢!

编辑:最后一件事,似乎最后一行 (console.log(...)) 在 $.getJSON 位之前执行,这也让我感到困惑。

4

1 回答 1

1

$.getJSON异步运行。你传递给它的函数是一个“回调”,这意味着它在完成getJSON它的事情回来时被调用。

如果你想对返回的 JSON 数据做一些事情,你必须等待回调执行。

另外,在旁注中,$.parseJSON(JSON.stringify(data))是多余的。该data对象已经是一个完美可用的对象,其中包含您的数据,但是您将该对象转换回 JSON 字符串,然后立即转换回对象。data照原样使用。有关更多信息,请查看jQuery API 文档getJSON

于 2013-06-08T05:08:51.690 回答