Javascript变量为'null'或& # 39;未定义# 39;从本地JSON文件加载后

javascript variable is 'null' or 'undefined' after loading it from a local JSON file

本文关键字:JSON 文件 加载 null Javascript 变量 未定义      更新时间:2023-09-26

我试图从JSON文件"gunsList "的内容创建一个javascript变量my_jason。(两者都存储在我机器上的同一个文件夹中)。

我似乎遇到了OP在这篇文章中遇到的同样的问题,当他纠正了他有缺陷的JSON文件时,这个问题得到了解决。认为我有同样的问题,我运行我的文件通过JSONLint(我假设这是适当的验证),它回来干净。

借鉴这篇文章的技巧,我尝试使用jQuery来完成它(注意:我在现有代码的其他部分成功地使用了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

我所有的代码引用数组在"gunsList。当我把它作为一个变量粘贴到我的js文件中时,它运行得很好,但是作为一个新手程序员,我真的很兴奋能让它与json一起工作。

这就是为什么你原来的$.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值之前返回

所以你试图通过在$.ajax()调用上使用async: false选项来修复它。但这是个非常糟糕的主意!除非你有非常很好的理由,否则不要使用这个选项:在许多浏览器中,它不仅会挂起你自己的网站,还会挂起所有浏览器选项卡和窗口,直到你的服务器返回数据。

相反,让$.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
});