Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
变量不能像预期的那样工作javascript-html_Javascript_Html_Json_Variables_Null - Fatal编程技术网

变量不能像预期的那样工作javascript-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

所以我的问题是下一个:

我试图从JSON文件中获取文本,在我的html标题上,我链接了一个标记,该标记具有:

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使其同步。再次感谢!谢谢更新。。。。。