从onreadystatechange返回变量

时间:2010-08-22 00:53:40

标签: javascript

我正在尝试从onreadystatechange返回一个变量,并且似乎遇到了范围问题。即使我设置了一个全局变量,当试图在事后检索我的变量时,它是未定义的。不太确定我做错了什么。在过去的3年里,我没有做过太多关于Javascript的工作。

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

非常感谢任何帮助或建议。

2 个答案:

答案 0 :(得分:1)

使用对象返回多个项目的唯一方法是什么?像这样?

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

答案 1 :(得分: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的net / console选项卡中的请求查看错误是否已发生