当前位置: 首页 > 知识库问答 >
问题:

从本地JSON文件加载javascript变量后,该变量为“null”或“未定义”

靳富
2023-03-14

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

我似乎遇到了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

当我将数组作为变量粘贴到js文件中时,我所有引用“gunsList.json”中数组的代码都运行良好,但作为一名初出茅庐的程序员,我真的很兴奋能让它与json一起工作。

共有1个答案

邢修明
2023-03-14

以下是原始的$.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
});
 类似资料:
  • 问题内容: 我正在尝试将.json文件加载到javascript中的变量中,但无法正常工作。这可能只是一个小错误,但我找不到它。 当我使用静态数据时,一切工作正常: 我把一切的在一个文件,并试图以加载到本地JavaScript变量作为解释在这里:负载JSON转换成变量。 我使用Chrome调试器运行它,它总是告诉我该变量的值为。该文件与调用它的.js文件位于同一目录中。 我错过了什么? 问题答案:

  • 问题内容: 我们经常在JavaScript代码中使用以下代码模式 有没有更冗长的检查方法具有相同的效果? 根据一些论坛和文献的说法,简单地讲,以下内容应具有相同的效果。 不幸的是,当未定义时,Firebug会将这样的语句评估为运行时错误,而第一个语句就可以了。这仅仅是Firebug的一种(有害的)行为,还是这两种方式之间确实存在某些区别? 问题答案: 您必须区分两种情况: 变量可以是或未 声明的

  • 问题内容: 我在 根文件夹 文件中有.env 文件 并将文件放在文件夹中。文件的第一行是 我还尝试了以下操作: ; ; 但是,当我从 命令提示符* 运行文件时,不会加载我的env变量 * 如果我使用 Visual Studio 并按 F5 ,它将加载! 我不确定我在做什么错,我想念什么。任何建议都非常感谢。谢谢。 问题答案: 使用如何? 您的问题似乎是执行路径。

  • 大家好!我想做多朗登陆页。当您选择语言时,会出现select with LANGS,JS将文本替换为JSON文件中的另一个语言。但当我尝试加载JSON时,JSON和JS出现了问题。我读了很多指南,但没有任何帮助。我拥有的:有一个json文件-lang.json。以下是其中的一部分: 我有main.js文件,上面的JSON文件应该作为var导入。我使用了其他人的脚本:将本地JSON文件加载到变量中,

  • 我正在尝试使用HTML、CSS和Javascript制作一个简单的哑巴井字游戏。 在下面的播放器移动函数中,由于JSON对象中存在Typeerror,因此无法调用ComputerMove函数。 下面是JSON对象:- 检查功能始终有效,控制台响应如下 调试时,我发现在此错误之后,计算机移动()函数永远不会被调用。所以请帮忙。