将本地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。
有两个可能的问题:
-
AJAX是asynchronous的,所以当从外部函数返回时,
json
将是未定义的。 当文件被加载时,callback函数会将json
设置为某个值,但是当时没有人在意。我看到你试图解决这个
'async': false
。 要检查是否有效,请将此行添加到代码中,并检查浏览器的控制台:console.log(['json', json]);
-
path可能是错的。 使用您用于在HTML文档中加载脚本的相同path。 所以如果你的脚本是
js/script.js
,使用js/content.json
一些浏览器可以显示他们尝试访问哪些URL以及如何去(成功/错误代码,HTML标题等)。 检查浏览器的开发工具,看看会发生什么。