这是我的代码。 我需要在外部函数
中访问内部函数变量var json = {}, state, response;
readRequestValues();
var xhr = new XMLHttpRequest();
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange=function(){
if(xhr.readyState == 4){
json.state = xhr.readyState;
json.response = xhr.responseText;
log.info(">>>>>>>>>>>>>>>"+json.state+">>>>>"+json.response);
var retValue=JSON.stringify(json);
log.info(">>> THIS IS RESULT >>>"+retValue);
}
}
xhr.open("GET", strBackend, true);//async=true
xhr.send();
log.info(">>> HERE I NEED TO ACCESS retValue >>>"+retValue);
由于
答案 0 :(得分:1)
你做不到。它尚未收到。
当我们得到它时,你应该调用任何代码:
var json = {}, state, response;
readRequestValues();
var xhr = new XMLHttpRequest();
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.onreadystatechange=function(){
if(xhr.readyState == 4){
json.state = xhr.readyState;
json.response = xhr.responseText;
log.info(">>>>>>>>>>>>>>>"+json.state+">>>>>"+json.response);
var retValue=JSON.stringify(json);
log.info(">>> THIS IS RESULT >>>"+retValue);
logValue(retValue); // here we call logger
}
}
xhr.open("GET", strBackend, true);//async=true
xhr.send();
function logValue(val) {
log.info(">>> HERE I NEED TO ACCESS retValue >>>"+val);
}
答案 1 :(得分:1)
这与内部和外部功能无关,与同步和异步功能无关。 onreadystatechange
回调是异步的,因此您必须调用在回调中使用接收数据的函数。否则你无论如何都无法访问它。
代码中的最后一行(log.info(...)
)将始终在回调内部收到数据之前执行。