Javascript“无法读取未定义的属性长度”错误

时间:2017-06-01 17:44:17

标签: javascript

我有一个javascript全局变量的问题,即我有全局变量niz_opcija2,我在一个函数中初始化它,但在其他函数中,它说它是未定义的.. 这是我的javascript:

  var niz_opcija2=[];
    window.onload=function(){

        ucitaj2();  
        ucitajKategorije();

    }

    function ucitaj2(){
        $.get("/manager/categoriesArticle",function(data){
            niz_opcija2.push(data);
            console.log(data);
            var select=document.getElementById("select3");
            for(var i=0;i<niz_opcija2[0].length;i++){
                var option=document.createElement("option");
                option.value=niz_opcija2[0][i].categoryCode;
                option.innerHTML=niz_opcija2[0][i].name;
                option.id=niz_opcija2[0][i].name;
                select.appendChild(option);
            }
        });
    }

    function ucitajKategorije(){

    for(var i=0;i<niz_opcija2[0].length;i++){
            var select=document.getElementById("selectKateg");
            var option=document.createElement("option");
            option.value=niz_opcija2[0][i].name;
            option.innerHTML=niz_opcija2[0][i].name;
            option.id=select.length;
            select.appendChild(option);
        }
    }

(在这段代码中我试图使用$ .get将数据作为json获取,并将其添加到选择列表select3selectKateg,并且ucitaj2()函数正在获取数据,但是ucitajKategorije是不是,但我认为它应该工作相同?)有谁知道可能是什么问题?提前感谢!

1 个答案:

答案 0 :(得分:0)

问题正在发生,因为niz_opcija2的初始化发生在异步函数调用中。

ucitaj2会在$.get("/manager/categoriesArticle"返回之前立即从服务器返回数据。

更改为在get成功功能中调用它:

var niz_opcija2=[];
window.onload=function(){

    ucitaj2();  

}

function ucitaj2(){
    $.get("/manager/categoriesArticle",function(data){
        niz_opcija2.push(data);
        console.log(data);
        var select=document.getElementById("select3");
        for(var i=0;i<niz_opcija2[0].length;i++){
            var option=document.createElement("option");
            option.value=niz_opcija2[0][i].categoryCode;
            option.innerHTML=niz_opcija2[0][i].name;
            option.id=niz_opcija2[0][i].name;
            select.appendChild(option);
        }

        //Call it here
        ucitajKategorije();
    });
}