2010-08-22 3 views
1

Я пытаюсь вернуть переменную из onreadystatechange и, похоже, имеет проблемы с областью видимости. Даже если я устанавливаю глобальную переменную, пытаясь получить мою переменную после факта, ее неопределенный. Не совсем уверен, что я делаю неправильно. За последние 3 года я не слишком много работал с Javascript.Возвращаемая переменная fromreadreadatechange

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

Edit: Также вы можете следить за запрос на вкладке/консоли сети на поджигатель, чтобы точно узнать, если произошла ошибка

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); 
} 
Смежные вопросы