我知道这个问题已经被问过好几次了,但在之前的任何问题中,我似乎都找不到适合我的解决方案。我有一个在我的 HTML 页面加载完成时设置的变量,但有时当我的代码尝试访问该变量时,它说它是未定义的。我不知道为什么,因为我相信我正在等待一切正常加载。这个异常似乎是随机发生的,因为大多数时候所有代码都运行良好。这是我的代码的简化版本:
var globalVar;
function initStuff(filePath) {
// I wait till the HTML page is fully loaded before doing anything
$(document).ready(function(){
var video = document.getElementById("videoElementID");
// My parseFile() function seems to run smoothly
var arrayOfStuff = parseFile(filePath);
if (arrayOfStuff == null) {
console.error("Unable to properly parse the file.");
} else {
setGlobalVariable(arrayOfStuff);
video.addEventListener("play", updateVideoFrame, false);
}
});
}
function setGlobalVariable(arrayOfStuff) {
window.globalVar = arrayOfStuff;
}
function updateVideoFrame() {
// A bunch of other code happens first
// This is the line that fails occasionally, saying
// "window.globalVar[0].aProperty.anArray[0] is undefined"
var test = window.globalVar[0].aProperty.anArray[0].aProperty;
}
我能想到的唯一可能导致此问题的是某种同步问题。不过,我不明白为什么会这样。请帮忙!
编辑:
如果异步问题来自我的parseFile(xmlFile)
方法,这就是我在那里做的事情。我认为这不可能导致问题,因为我强制该方法同步发生,但万一我错了,这里是:
function parseKML(xmlFile) {
var arrayOfStuff = new Array();
// Turn the AJAX asynchronicity off for the following GET command
$.ajaxSetup( { async : false } );
// Open the XML file
$.get(xmlFile, {}, function(xml) {
var doc = $("Document", xml);
// Code for parsing the XML file is here
// arrayOfStuff() gets populated here
});
// Once I'm done processing the XML file, I turn asynchronicity back on, since that is AJAX's default state
$.ajaxSetup( { async : true } );
return arrayOfStuff;
}