将本地JSON文件加载到variables中

我试图加载.json文件到JavaScript中的variables,但我不能得到它的工作。 这可能只是一个小错误,但我找不到它。

当我使用这样的静态数据时,一切正常:

var json = { id: "whatever", name: "start", children: [{ "id":"0.9685","name":" contents:queue"},{ "id":"0.79281","name":" contents:mqq_error"}}] } 

所以我把{}中的所有内容放在一个content.json文件中,并尝试将其加载到本地javascriptvariables中,如下所述:将json加载到variables中

 var json = (function() { var json = null; $.ajax({ 'async': false, 'global': false, 'url': "/content.json", 'dataType': "json", 'success': function (data) { json = data; } }); return json; })(); 

我用chromedebugging器运行它,它总是告诉我,variablesjson的值是null。 content.json驻留在调用它的.js文件所在的目录中。

我错过了什么?

如果您直接将对象粘贴到content.json中,则无效的json。 json键AND值必须用双引号(而不是单个!)包装,除非值是数字。 下面将是你的对象作为有效的JSON。

 { "id": "whatever", "name": "start", "children": [{ "id":"0.9685","name":" contents:queue"},{ "id":"0.79281","name":" contents:mqq_error"}] } 

(你也有一个额外的}

我的解决scheme,在这里回答,是使用:

  var json = require('./data.json'); //with path 

该文件只加载一次,进一步请求使用caching。

有两个可能的问题:

  1. AJAX是asynchronous的,所以当从外部函数返回时, json将是未定义的。 当文件被加载时,callback函数会将json设置为某个值,但是当时没有人在意。

    我看到你试图解决这个'async': false 。 要检查是否有效,请将此行添加到代码中,并检查浏览器的控制台:

     console.log(['json', json]); 
  2. path可能是错的。 使用您用于在HTML文档中加载脚本的相同path。 所以如果你的脚本是js/script.js ,使用js/content.json

    一些浏览器可以显示他们尝试访问哪些URL以及如何去(成功/错误代码,HTML标题等)。 检查浏览器的开发工具,看看会发生什么。