var preGameRequest = new XMLHttpRequest();
var preGameData;
preGameRequest.open("GET", "/matches/live.json");
preGameRequest.onload = function() {
preGameData = JSON.parse(preGameRequest.responseText);
}
preGameRequest.send();
console.log(preGameData); // main problem is here
这是我的代码。我将preGameData定义为全局,并尝试将/matches/live.json文件的数据保存到preGameData中。当我从范围之外尝试console.log(preGameData)时(比如在代码部分中),我将'undefined'作为返回。如果我尝试从作用域内部调试console.log(preGameData)。我真的不知道发生了什么。
答案 0 :(得分:0)
该代码应该有效:
preGameRequest.onload = function() {
preGameData = JSON.parse(preGameRequest.responseText);
console.log(preGameData);
}

原因:是 preGameRequest.send()函数异步操作。
当浏览器尝试执行console.log()时(在您的示例中),尚未收到http响应,并且该变量实际上是 undefined 。
但是如果你把console.log()放在处理程序里面(就像在我的例子中那样),它会在响应已经收到时直接执行(直接在onload()处理程序中)。这就是为什么变量preGameData已经被定义的原因。