【问题标题】:Javascript scope variable [duplicate]Javascript范围变量[重复]
【发布时间】:2017-11-01 17:18:04
【问题描述】:
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 中。当我尝试从范围之外(如代码部分)控制台.log(preGameData)时,我得到“未定义”作为返回。如果我尝试从范围内访问 console.log(preGameData) ,它就可以工作。我真的不知道发生了什么事。

【问题讨论】:

  • 您可能想阅读一些关于异步 JavaScript 的教程。

标签: javascript angularjs xmlhttprequest


【解决方案1】:

该代码应该可以工作:

preGameRequest.onload = function() {
    preGameData = JSON.parse(preGameRequest.responseText);
    console.log(preGameData);
}

原因:preGameRequest.send()函数异步操作

当浏览器尝试执行 console.log()(在您的示例中)时,尚未收到 http 响应,并且该变量实际上是 undefined

但是,如果您将 console.log() 放在处理程序中(如我的示例中所示),它将在已经收到响应时立即执行(直接在 onload() 处理程序中)。这就是变量 preGameData 已经定义的原因。

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2014-03-28
    • 2021-12-04
    • 2014-09-17
    • 2013-06-12
    相关资源
    最近更新 更多