-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);

 }
}
xhr.open("GET", strBackend, true);//async=true
xhr.send();

log.info(">>> HERE I NEED TO ACCESS retValue >>>"+retValue);

谢谢

4

2 回答 2

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);
}    
于 2015-04-21T08:25:37.400 回答
1

这不是关于内部和外部函数,而是关于同步和异步函数。onreadystatechange回调是异步的,因此您必须在回调中调用使用接收到的数据的函数。否则你无论如何都无法访问它。

代码中的最后一行 ( log.info(...)) 将始终在回调中接收到数据之前执行。

于 2015-04-21T08:26:16.953 回答