Не могу понять, почему моя глобальная переменная workRegionCode
установлена неправильно.
В функции getWorkRegion()
после получения обратного вызова ajax она пытается установить глобальную переменную workRegionCode
. (внутри функции setFirstIndexWorkRegionCode()
).
Предупреждение в setFirstIndexWorkRegionCode()
выводит ожидаемое значение, например 401 или 123 и т. Д.
Но тогда, когда вызывается getMachines()
, глобальная переменная workRegionCode
является неопределенной: (* 1016 *
Это 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);
}