我试图从onreadystatechange返回一个变量,但似乎在作用域方面遇到了问题。即使我设置了一个全局变量,当我试图在事后检索我的变量时,它也是未定义的。我不太确定我做错了什么。在过去的三年里,我没有做过太多的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);任何帮助或建议都将不胜感激。
发布于 2010-08-22 09:01:15
你必须使用一个回调函数来处理数据。请记住,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选项卡中的请求查看是否发生了错误
发布于 2010-08-22 09:44:30
使用一个对象返回多个项是唯一的方法吗?像这样吗?
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);
}https://stackoverflow.com/questions/3539654
复制相似问题