从本地JSON文件加载后,javascript变量为'null'或'undefined'

时间:2013-05-23 02:41:40

标签: javascript jquery json

我正在尝试从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_jsonundefined

不可否认,我对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_jsonnull

当我将其作为变量粘贴到我的js文件中时,我在“gunsList.json”中引用数组的所有代码运行正常,但作为一个初出茅庐的程序员,我真的很高兴能够使用JSON 。

1 个答案:

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