1

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

我似乎遇到了 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.json”中的数组作为变量粘贴到我的 js 文件中时,我所有引用该数组的代码都运行良好,但作为一个初出茅庐的程序员,我真的很高兴能够让它与 JSON 一起工作。

4

1 回答 1

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()or$.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
});
于 2013-05-23T02:45:24.720 回答