2015-04-21 4 views
-1

Вот мой код. Мне нужно получить доступ к внутренней переменной функции в внешней функцииjavascript внутренняя функция переменная доступ снаружи

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

Благодарности

+3

Вы не можете. Это еще не получено. –

+1

объявить его снаружи и назначить внутри, но если его любой обратный вызов тогда вы не можете. – Panther

+1

, почему вы хотите это сделать. напишите свой код в самом обратном вызове – Panther

ответ

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

Речь идет не о внутренних и внешних функций столько же, сколько синхронных и асинхронных функций. onreadystatechange обратные вызовы асинхронны, поэтому вам нужно вызвать функцию, которая использует полученные данные внутри обратного вызова. В противном случае у вас нет доступа к нему.

Последняя строка в вашем коде (log.info(...)) всегда будет выполняться до того, как данные будут получены внутри обратного вызова.

Смежные вопросы