我正在尝试从JSON文件“gunsList.json”的内容创建一个javascript变量my_jason
(两者都存储在我的机器上的同一文件夹中)。
我似乎遇到了OP在this post中遇到的相同问题,当他纠正了他有缺陷的JSON文件时解决了这个问题。我认为我有同样的问题,我通过JSONLint运行我的文件(我假设这是正确的验证),它恢复了干净。
从this post借用提示,我尝试使用jQuery来完成它( note :我在现有代码的其他部分成功使用jQuery),如下所示:
var my_json;
$.getJSON('gunList.json', function(json) {
my_json = json;
});
当我尝试上述方法时(例如alert(my_json)
),my_json
为undefined
。
不可否认,我对AJAX知之甚少,但我也尝试过:
var my_json = (function () {
var my_json = null;
$.ajax({
'async': false,
'global': false,
'url': 'gunsList.json',
'dataType': "json",
'success': function (data) {
my_json = data;
}
});
return my_json;
})();
在上述情况中,my_json
为null
。
当我将其作为变量粘贴到我的js文件中时,我在“gunsList.json”中引用数组的所有代码运行正常,但作为一个初出茅庐的程序员,我真的很高兴能够使用JSON 。
答案 0 :(得分:5)
这就是原始$.getJSON()
代码不起作用的原因 - 评论显示了每一步的执行顺序和my_json
的值:
var my_json;
// 1 - my_json is undefined
$.getJSON('gunList.json', function(json) {
// 3 (!)
my_json = json;
// 4 - my_json now has the JSON data
});
// 2 - my_json is undefined (!)
如您所见,该函数在设置my_json
值之前返回。
因此,您尝试使用async: false
调用上的$.ajax()
选项进行修复。但这是一个非常糟糕的主意!永远不要使用该选项,除非你有非常的理由:在许多浏览器中,它不仅会挂起你自己的网站,而且还会挂起所有浏览器标签和窗口,直到你的服务器返回数据。
相反,让$.ajax()
或$.getJSON()
调用异步操作,并对回调中的数据或从该回调调用的函数执行某些操作。因此,回到原来的$.getJSON()
代码,您可以执行此操作:
$.getJSON( 'gunList.json', function( json ) {
// Do stuff with JSON data here, or call a function here and
// pass the data to it as an argument
});