我在函数外传递变量时遇到了一些问题。 它看起来很简单,但我遇到了一些问题。
var myJson;
var url = "https://openbook.etoro.com/api/Markets/Symbol/?name=" + symbol;
var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
xhr.onreadystatechange = XHRhandler;
xhr.open("GET", "proxy.php?url=" + url, true);
xhr.send(null);
function XHRhandler() {
if (xhr.readyState == 4) {
var json;
if (JSON && JSON.parse) {
json = JSON.parse(xhr.responseText);
} else {
eval("var json = " + xhr.responseText);
}
console.log(json);
myJson= json;
xhr = null;
}
}
console.log(myJson);
我需要的是将数据从局部变量json传递给全局myJson; 但是,当我做console.log(myJson)时,我得到了未定义。 有什么问题?
谢谢
答案 0 :(得分:0)
尝试在if条件中移动语句console.log(myJson);
,或者使用某个值初始化变量。看来你的语句在被填充任何值之前被调用。
答案 1 :(得分:0)
XMLHttpRequest是异步的,所以当你尝试将myJson变量写入console时它还没有完成。将它包装在一个函数中,并在XMLHttpRequest完成后调用该函数。
var myJson;
var url = "https://openbook.etoro.com/api/Markets/Symbol/?name=" + symbol;
var xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP"));
xhr.onreadystatechange = XHRhandler;
xhr.open("GET", "proxy.php?url=" + url, true);
xhr.send(null);
function XHRhandler() {
if (xhr.readyState == 4) {
var json;
if (JSON && JSON.parse) {
json = JSON.parse(xhr.responseText);
} else {
eval("var json = " + xhr.responseText);
}
console.log(json);
myJson= json;
xhr = null;
writeToConsole();
}
}
function writeToConsole() {
console.log(myJson);
}