大家好!我想制作多个登陆页面。将选择语言,当您选择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 variable 和 load 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);
没有什么能帮到我。我做错了什么?
提前致谢!
答案 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
}