2010-08-22 89 views
1

我想從onreadystatechange返回一個變量,似乎有問題的範圍。即使我設置了全局變量,當試圖在事後檢索我的變量時,它的未定義。不太確定我做錯了什麼。在過去的三年裏,我還沒有用Javascript做過多的工作。從onreadystatechange返回變量

var lat; 
var lon; 

window.onload = function dosomething(){ 

    var myRequst = new XMLHttpRequest(); 

    var url = "http://www.instamapper.com/api?action=getPositions&key=584014439054448247"; 

    myRequst.open('get', url); 

    myRequst.onreadystatechange = function(){ 

    if ((myRequst.readyState == 4) && (myRequst.status == 200)){ 

    //alert(myRequst.responseText); 

    var data = myRequst.responseText; 
    collected=data.split(","); //parses the data delimited by comma and put data into array 

lat = collected[4]; 
lon = collected[5]; 

document.write("latitude "+lat+"<BR>\n"); 
document.write("latitude "+lon+"<BR>\n"); 

    } 

    } 

    myRequst.send(null); 


} 

document.write(lat); 

任何幫助或建議將不勝感激。

回答

0

你必須使用一個回調函數來處理數據。記住AJAX代表異步(JAX)。因此,如果您的onreadystatechange處理該值之後尚不可用是因爲該請求在那一刻沒有完成。

myRequest.onreadystatechange = function() { 
    if(myRequest.readyState == 4 && myRequest.status == 200) { 
    (function(data) { 
     // do something with the response in the variable data 
    })(myRequest.responseText); 
    } 
} 

編輯:你也可以按照在Firebug淨/控制檯選項卡的要求清楚地看到,如果發生錯誤,

0

通過使用對象返回多個項目的唯一途徑?像這樣?

myRequest.onreadystatechange = function() { 
if(myRequest.readyState == 4 && myRequest.status == 200) { 

    var obj; 
    obj.latitude = collected[4]; 
    obj.longitude = collected[5]; 
    getdata(obj); 
} 
} 



function getdata(obj) 
{ 
lat = obj.latitude; 
lon = obj.longitude; 
document.write(lon); 
document.write(lat); 
}