变量不能像预期的那样工作javascript-html
所以我的问题是下一个: 我试图从JSON文件中获取文本,在我的html标题上,我链接了一个标记,该标记具有:变量不能像预期的那样工作javascript-html,javascript,html,json,variables,null,Javascript,Html,Json,Variables,Null,所以我的问题是下一个: 我试图从JSON文件中获取文本,在我的html标题上,我链接了一个标记,该标记具有: var language = ""; var langDoc = null; //Function to change the value function setLang() { var myCookie = getCookie("language"); if (myCookie == null) { document.cookie = "langu
var language = "";
var langDoc = null;
//Function to change the value
function setLang() {
var myCookie = getCookie("language");
if (myCookie == null) {
document.cookie = "language=español";
language = "español";
$.getJSON("/lenguajes/" + language + ".json", function(data) {
langDoc = data;
});
}
else {
language = myCookie;
$.getJSON("/lenguajes/" + language + ".json", function(data) {
langDoc = data;
});
}
}
//Final function to get text from file
function getTextFromJson(textToGet){
return langDoc[textToGet];
}
我试图调用setLang();函数调用我的getTextFromJson()one之前,从修改后的变量中获取文本,但当我这样做时,函数表示无法从null中获取属性“IDIOMA”,因此变量没有改变,HTML如下所示:
<script type="text/javascript"> setLang(); </script>
<script type="text/javascript"> alert(getTextFromJson("IDIOMA")); </script>
<!-- other HTML -->
setLang();
警报(getTextFromJson(“IDIOMA”);
我们的想法是能够在HTML的其他部分使用该方法来创建多语言页面
谢谢大家!
$。getJSON
是一种异步方法,因此原因可能是调用getTextFromJson
函数时,JSON
仍未加载,因此从成功回调示例调用此函数如下:
var language = "";
var langDoc = null;
//Function to change the value
function setLang() {
var myCookie = getCookie("language");
if (myCookie == null) {
document.cookie = "language=español";
language = "español";
$.getJSON("/lenguajes/" + language + ".json", function(data) {
langDoc = data;
getTextFromJson("");
});
}
else {
language = myCookie;
$.getJSON("/lenguajes/" + language + ".json", function(data) {
langDoc = data;
getTextFromJson("");
});
}
}
//Final function to get text from file
function getTextFromJson(textToGet){
return langDoc[textToGet];
}
在另一种情况下,您也可以将$.getJSON
方法更改为synchronous,但这种方法很快就会被弃用。所以尽量不要用那个。可以找到更多细节
无法从null获取属性“IDIOMA”
查看您的代码,查看您的代码,我们可以正确地告诉您,langDoc
具有初始值null
language = ""
langDoc = null
要点
当从Chrome浏览器控制台调用setLang()
时,会引发如下错误:
<script type="text/javascript"> setLang(); </script>
<script type="text/javascript"> alert(getTextFromJson("IDIOMA")); </script>
<!-- other HTML -->
未捕获引用错误:未定义getCookie
在塞朗(6:20)
时间:1:1
setLang@VM2043:6
(匿名)@VM2045:1
$。getJSON
是异步的,因此它不会执行执行
,并且在JSON调用返回数据之前调用下一个脚本
更好的方法是处理承诺
。您可以轻松处理错误
,成功
案例
在您的if
和else
条件中也有一些代码优化
var language = "";
var langDoc = null;
//Function to change the value
function setLang() {
var myCookie = getCookie("language");
if (myCookie == null) {
document.cookie = "language=español";
language = "español";
}
else {
language = myCookie;
}
var url= "/lenguajes/" + language + ".json";
var myPromise = $.getJSON("url")
myPromise.done(function(data) {
//Handle the success case here
langDoc=data;
});
myPromise.fail(function(reason) {
//Handle the fail case here
});
//After success you can call your function
myPromise.then(function(data) {
langDoc=data;
getTextFromJson(data);
});
}
//Final function to get text from file
function getTextFromJson(textToGet){
return langDoc[textToGet];
}
你什么时候调用这个函数?尝试从$.getJSONI call setLang()调用它;要获取我的文档和语言,然后调用getTextFromJson(),它应该查看setLang()上指定的文档;,如果我从$.getJSON调用它,它工作得很好,但奇怪的是我的变量根本没有更改$.getJSON是异步的,非常感谢!我不知道我怎么没有想到这一点!我将尝试使用ajax使其同步。再次感谢!谢谢更新。。。。。