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

将JSON文件作为变量加载到JS[duplicate]

单于正业
2023-03-14

大家好!我想做多朗登陆页。当您选择语言时,会出现select with LANGS,JS将文本替换为JSON文件中的另一个语言。但当我尝试加载JSON时,JSON和JS出现了问题。我读了很多指南,但没有任何帮助。我拥有的:有一个json文件-lang.json。以下是其中的一部分:

{
"navigation-list" : {
    "en" : ["About", "Contacts", "Cases"],
    "ru" : ["О нас", "Контакты", "Случаи"],
},
"fb-like" : {
    "en" : "Like",
    "ru" : "Нравится",
},
"facebook-share" : {
    "en" : "Share",
    "ru" : "Поделиться",
},
"twitter-tweet" : {
    "en" : "Tweet",
    "ru" : "Твитнуть",
},
"twitter-follow" : {
    "en" : "Follow on twitter",
    "ru" : "Читать в twitter",
},
}

我有main.js文件,上面的JSON文件应该作为var导入。我使用了其他人的脚本:将本地JSON文件加载到变量中,将JSON加载到变量中

这里是代码:

var json = (function () {
  var json = null;
  $.ajax({
    'async': false,
    'global': false,
    'url': 'lang.json',
    'dataType': "json",
    'success': function (data) {
        json = data;
    }
  });
  return json;
})(); 

console.log(json);

但是我整天都在控制台空着。

另外,我尝试了另一种方式,比如:

var lang={};

jQuery.getJSON("lang.json", function(data) { 
 lang.push(data);
});

console.log(lang); 

什么也帮不了我。我做错了什么?

提前感谢!

共有1个答案

公羊浩气
2023-03-14

您不能这样做,您正在调用的函数在这两种情况下都是异步的。

我将解释第二个问题。

var lang=[]; // It should be an array not {}

jQuery.getJSON("lang.json", function(data) { 
 lang.push(data); // This line is called second.
});

console.log(lang); // This line is executed first.

在这里

jQuery.getJSON("lang.json", function(data) { 
     lang.push(data); // This line is called second.
});

jquery将读取您的文件lang.json,但其他代码不会等待它返回。他们将正常执行。

那么,如何读取数据呢?

只有在调用回调后才能读取数据。在jQuery.getJSON和名称lang.json中,还传递了一个函数

function(data) { 
         lang.push(data); 
}

读取文件时将调用此函数。函数的数据参数将包含文件的内容。

那么,你的代码

console.log(lang);//首先执行此行。

当运行时,lang中没有任何内容,您需要等到调用回调时,才会初始化lang。

一种解决方案是从回调本身调用console.log(lang);

var lang=[];

jQuery.getJSON("lang.json", function(data) { 
 lang.push(data);
 console.log(lang[0]);
});

如果您有其他代码,那么您可以创建一个函数并从回调调用它。

 var lang=[];

 jQuery.getJSON("lang.json", function(data) { 
   lang.push(data);
   _do();
 });

 function _do(){
   console.log(lang[0]);
  // Do all code dependent on the lang
 }
 类似资料:
  • 问题内容: 我正在尝试将.json文件加载到javascript中的变量中,但无法正常工作。这可能只是一个小错误,但我找不到它。 当我使用静态数据时,一切工作正常: 我把一切的在一个文件,并试图以加载到本地JavaScript变量作为解释在这里:负载JSON转换成变量。 我使用Chrome调试器运行它,它总是告诉我该变量的值为。该文件与调用它的.js文件位于同一目录中。 我错过了什么? 问题答案:

  • 问题内容: 我必须做一些非常简单的事情,但是据我所知,似乎没有一个简单的方法可以做到这一点。我只想从远程源加载JSON数据,然后使用jQuery将其存储在全局Javascript变量中。这是我所拥有的: my_json变量保持未定义。我认为这显然是一个范围问题。在我看来,$ .getJSON方法应该返回JSON,但它返回一个XMLHttpRequest对象。如果我这样做: 那是行不通的,因为直到r

  • 问题内容: 我有一个React组件,我想从文件中加载JSON数据。即使我将变量 数据 创建为全局变量,控制台日志当前也不起作用 理想情况下,我希望这样做,但它不起作用-它尝试在文件名的末尾添加 “ .js” 。 最好的方式,最好是“反应”方式的任何建议,将不胜感激! 问题答案: 您正在打开一个异步连接,但是您已经编写了代码,就好像它是同步的一样。该回调函数将不会与你的代码同步执行(即前),但你的整

  • 问题内容: 我正在使用需要将HTML绑定到Rich Text Editor的表单。存储此HTML内容的最佳方法是HTML文件。 我不太清楚如何从文件加载HTML模板并将其分配给变量。 在使用templateUrl时,伪指令似乎能够做到这一点。想知道这是否有任何低角度的api来实现控制器内部的相同功能 问题答案: 所有模板均加载到缓存中。有一个可注入的$ templateCache 服务,您可以使用

  • 问题内容: 我试图将我的网站从基于XML的配置文件迁移到基于JSON的配置文件。有没有一种方法可以加载文件,使其变成对象?我一直在搜索网络,但找不到。我已经将文件转换并另存为。我宁愿不使用第3方库。 问题答案: 您 确实 应该使用已建立的库,例如Newtonsoft.Json(甚至Microsoft都使用MVC和WebAPI等框架),或者.NET的内置JavascriptSerializer。 这