2010-08-22 88 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); 
}