Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 为什么不设置全局变量值?_Javascript_Ajax_Global Variables - Fatal编程技术网

Javascript 为什么不设置全局变量值?

Javascript 为什么不设置全局变量值?,javascript,ajax,global-variables,Javascript,Ajax,Global Variables,我不明白为什么我的全局变量工作区域代码设置不正确 在函数getWorkRegion()中,在获得ajax回调后,它尝试设置workRegionCode全局变量。(函数的内部setFirstIndexWorkRegionCode()) setFirstIndexWorkRegionCode()中的警报将输出预期值,如401或123等 但是当调用getMachines()时,全局变量workRegionCode未定义:( 这个js从window.onload()开始 (请忽略那些日文JSON键值和少

我不明白为什么我的全局变量
工作区域代码
设置不正确

在函数
getWorkRegion()
中,在获得ajax回调后,它尝试设置
workRegionCode
全局变量。(函数的内部
setFirstIndexWorkRegionCode()

setFirstIndexWorkRegionCode()中的警报将输出预期值,如401或123等

但是当调用
getMachines()
时,全局变量
workRegionCode
未定义:(

这个js从window.onload()开始

(请忽略那些日文JSON键值和少量日文变量,它们是无害的)

代码:

    var workRegionDropdown = document.getElementById("workRegionDropdown");;
    var machineDropdown = document.getElementById("machineDropdown");

    //this is the global variable with problem.....
    var workRegionCode;

    //INIT
    window.onload = function() {

        getWorkRegions();

       // alert("before: " + window.workRegionCode);

        getMachines();

      //  alert("after: " + window.workRegionCode);
    }

    function addWorkRegionToDropdown(jsonObject, dropdown) {
        for(var i=0, j=jsonObject.length; i<j; i++) {
            var option = document.createElement("option");
            option.text = jsonObject[i].作業区コード + ":" + jsonObject[i].作業区名漢字;
            option.value = jsonObject[i].作業区コード;
            dropdown.options.add(option);
        }
    }

    function addMachineToDropdown(jsonObject, dropdown) {
        for(var i=0, j=jsonObject.length; i<j; i++) {
            var option = document.createElement("option");
            option.text = jsonObject[i].機械名;
            option.value = jsonObject[i].機械名;
            dropdown.options.add(option);
        }
    }


    function getMachines() {

        //!!!!!!!!!!! workRegionCode is undefined.. why?!?!?!  

        alert("inside of getMachines() ==> " + window.workRegionCode);

        var ajaxRequest = new XMLHttpRequest();
        ajaxTimeout = setTimeout(function() {timeoutAjax(ajaxRequest, "showMessage")}, "5000");

        ajaxRequest.onreadystatechange = function() {
            if(ajaxRequest.readyState == 4  ) {
                clearTimeout(ajaxTimeout);
                switch ( ajaxRequest.status ) {
                    case  200:
                                var jsonOut = JSON.parse(ajaxRequest.responseText);
                                addMachineToDropdown(jsonOut.機械, machineDropdown);
                                break;
                    default:

                                document.getElementById("showMessage").innerHTML = ajaxRequest.responseText;
                }
            }
        }


        var aMonthAgo = new Date();
        with(aMonthAgo) {
            setMonth(getMonth() - 1)
        }
        aMonthAgo = aMonthAgo.getYYYYMMDD();
        var 終了日 = "29991231";

        var url = "../resources/machine/list/" + window.workRegionCode + "/" + aMonthAgo + "/" + 終了日;
        ajaxRequest.open("GET", url, true);
        ajaxRequest.send(null)
    }




    function getWorkRegions() {
        var ajaxRequest = new XMLHttpRequest();
        ajaxTimeout = setTimeout(function() {timeoutAjax(ajaxRequest, "showMessage")}, "5000");

        ajaxRequest.onreadystatechange = function() {
            if(ajaxRequest.readyState == 4  ) {
                clearTimeout(ajaxTimeout);
                switch ( ajaxRequest.status ) {
                    case  200:
                                var jsonOut = JSON.parse(ajaxRequest.responseText);

                                //set global variable workRegionCode
                                setFirstIndexWorkRegionCode(jsonOut);

                                addWorkRegionToDropdown(jsonOut.作業区, workRegionDropdown);
                    default:

                                document.getElementById("showMessage").innerHTML = ajaxRequest.responseText;
                }
            }
        }

        var url = "../resources/workshop/list";
        ajaxRequest.open("GET", url, true);
        ajaxRequest.send(null)
    }//end getWorkRegions()

    function setFirstIndexWorkRegionCode(jsonString) {

        //here I set the value to work region code!
        window.workRegionCode = jsonString.作業区[0].作業区コード;
        alert("作業区コード: " + window.workRegionCode);

     }
var workRegionDropdown=document.getElementById(“workRegionDropdown”);;
var machineDropdown=document.getElementById(“machineDropdown”);
//这是有问题的全局变量。。。。。
var工作区代码;
//初始化
window.onload=函数(){
getWorkRegions();
//警报(“在:+window.workRegionCode之前”);
getMachines();
//警报(“在:+window.workRegionCode之后”);
}
函数AddWorkRegionDropdown(jsonObject,dropdown){
对于(var i=0,j=jsonObject.length;iAJAX中的“A”代表异步。这意味着AJAX调用被触发,其余代码继续执行。它不会等待响应。这将是一个同步调用。如果getMachines()依赖于对getWorkRegions()的响应,则应执行以下操作:

window.onload = function() {

    getWorkRegions();

}


getWorkRegions() {

...
    if (ajaxRequest.status == 200) {

        ...
        var jsonOut = JSON.parse(ajaxRequest.responseText);
        setFirstIndexWorkRegionCode();
        addWorkRegionToDropdown();

        getMachines();
        ...
    }

...

}
AJAX中的“A”代表异步。这意味着AJAX调用将被触发,其余代码将继续执行。它不会等待响应。这将是一个同步调用。如果getMachines()依赖于对getWorkRegions()的响应,则应执行以下操作:

window.onload = function() {

    getWorkRegions();

}


getWorkRegions() {

...
    if (ajaxRequest.status == 200) {

        ...
        var jsonOut = JSON.parse(ajaxRequest.responseText);
        setFirstIndexWorkRegionCode();
        addWorkRegionToDropdown();

        getMachines();
        ...
    }

...

}

workRegionCode
的值是在异步AJAX请求的回调函数中分配的,但您正在尝试读取创建AJAX请求的线程中的值。
getMachines()
将始终在您的
ajaxRequest之前执行。onreadystatechange
函数触发设置
workRegionCode

在异步AJAX请求的回调函数中分配
workRegionCode
的值,但您正在尝试读取创建AJAX请求的线程中的值de>getMachines()
将始终在您的
ajaxRequest之前执行。onreadystatechange
函数将触发设置
workRegionCode

是,我在没有“窗口”的情况下启动但是我读到一篇文章说全局变量隐式地是window对象的属性。另外,Japanese变量也可以,另一个带有jap字符的js文件工作得很好。是的,我开始时没有“window”但我读过一篇文章,说全局变量隐式地是窗口对象的属性。另外,日语变量也可以,另一个带有jap字符的js文件工作正常。