loadJSON(path, callback) {
console.log("path: " + path);
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', path, true);
xobj.onreadystatechange = function() {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(xobj.responseText);
}
};
xobj.send(null);
}
上記はjsonファイルにローカルでアクセスする関数です。 その後、 `foobar() 'から検索されたデータを解析します。 しかし、コールバック機能の「外部」から、変数「json」にアクセスすることはできません。 私は同様のSOの質問と非同期の概念を検索しましたが、まだそれを解決する方法を見つけることができませんでした。javacriptのコールバック関数の "outside"変数へのアクセス
function foobar() {
var json;
loadJSON("data.json", function(response) {
json = JSON.parse(response);
console.log(json[0].name); // Successfully shows the result
});
console.log(json[0].name); // TypeError: json is undefined
}
コールバックの変数「外部」にアクセスする方法はありますか?
http://stackoverflow.com/questions/14220321/how-do-i-return-from-as-asynchronous-call –
[なぜ私の変数は関数の中で変更した後に変更されないのですか? - 非同期コードリファレンス](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – Andreas
両方のリンクをチェックしましたそして今私は理解しています**なぜコールバックの '外部'と呼ばれることができないのですか?今は 'loadJSON()'の中に関数を実装して問題を解決しましたが、それ以外の変数にアクセスすることができます。なぜ私は回避策があるのか知りたいのですが。 – HUKS