2014-03-12 19 views
0

我在函數外部傳遞變量時遇到了一些問題。 這似乎很簡單,但我有一些問題。從本地變量到全局在javascript中傳輸數據

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)我得到未定義。 問題是什麼?

謝謝

+1

由於console.log(myJson);'沒有等待xhr完成而立即執行。僅當數據從服務器到達時纔會調用XHRhandler。 –

+0

可能重複[如何從AJAX調用返回響應?](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-ajax-call) – Quentin

+0

您可以也嘗試'promise'並在其回調中設置變量。 –

回答

0

嘗試移動的聲明console.log(myJson);你如果條件內或交替與一些值初始化變量。看起來你的聲明在被任何值填充之前就被調用了。

0

XMLHttpRequest是異步的,因此當您嘗試將myJson變量寫入控制檯時,它尚未完成。將它包裝在一個函數中,並在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); 
}