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

时间:2017-05-29 14:03:15

标签: javascript jquery json getjson

大家好!我想制作多个登陆页面。将选择语言,当您选择lang时,JS用JSON文件中的另一个lang替换文本。但是当我尝试加载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导入。我使用了其他人的脚本: Load local JSON file into variableload json into variable

这是代码:

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);

但是我整天都在控制台中获得了null。

另外,我尝试了其他方法,例如:

var lang={};

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

console.log(lang); 

没有什么能帮到我。我做错了什么?

提前致谢!

1 个答案:

答案 0 :(得分:3)

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

我将解释第二个。

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); // This line is executed first.

跑步的时候,没有任何内容可以让你等到你的回叫被调用,那么只有你的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
 }