我试图使用this method(没有jQuery)操作从本地JSON文件加载的数据,但似乎无法访问全局范围内的对象:
var actual_JSON;
function loadJSON(callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', 'my_data.json', true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(xobj.responseText);
}
};
xobj.send(null);
}
然后在加载文档后调用该函数,使用匿名函数,如下所示:
function loaded(e) {
loadJSON( function(response) {
actual_JSON = JSON.parse(response);
console.log(actual_JSON); // Object {...}
}
);
console.log(actual_JSON); // undefined
};
document.addEventListener("DOMContentLoaded", loaded, false);
不幸的是,我还没有完全理解闭包的概念以及它是否/如何影响actual_JSON
的范围。它似乎仅在传递给loadJSON()
的匿名函数内定义为XMLHttpRequest()
的回调,尽管我在全局声明它。
答案 0 :(得分:-1)
尝试在外部范围内定义actual_JSON
:
function loaded(e) {
var actual_JSON;
loadJSON( function(response) {
actual_JSON = JSON.parse(response);
console.log(actual_JSON); // Object {...}
}
);
console.log(actual_JSON); // undefined
};
document.addEventListener("DOMContentLoaded", loaded, false);
此变量在function(response)
范围内定义,但在loaded(e)
范围内不可见。