AJAX с функциями обратного вызова - PullRequest
2 голосов
/ 22 августа 2010

У меня проблемы с доступом к данным в ajax-соединении.Не уверен, что не так с моим кодом.Кажется, что он никогда не достигает 2-й функции.Есть идеи?

function fetchgps(callback)
{
  var url = "http://www.instamapper.com/api?action=getPositions&key=584014439054448247";

  var myRequest = new XMLHttpRequest();
  myRequest.onload = function(e) {xml_loaded(e, myRequest, callback);}
  myRequest.open("GET", url);
  myRequest.setRequestHeader("Cache-Control", "no-cache");
  myRequest.setRequestHeader("wx", "385");
 myRequest.send(null);

 return myRequest;
}

function xml_loaded(event, request, callback)
{
 if (request.responseText){
  var obj = {error:false, errorString:null}

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

obj.latitude = collected[4];
obj.longitude = collected[5];

callback(obj);
  }

  else
{
callback ({error:true, errorString:"XML request failed. no responseXML"}); //Could be any number of things..
}

}

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

fetchgps(dealwithgps);

1 Ответ

3 голосов
/ 22 августа 2010

То request.onreadystatechange вместо request.onload

function fetchgps(callback)
{
  var url = 
   "http://www.instamapper.com/api?action=getPositions&key=584014439054448247";

  var myRequest = new XMLHttpRequest();
  // myRequest.onload = function(e) {xml_loaded(e, myRequest, callback);}
  myRequest.onraedystatechange = function() { //onraedystatechange instead of onload!!
    xml_loaded(myRequest, callback);
  }
  myRequest.open("GET", url);
  myRequest.setRequestHeader("Cache-Control", "no-cache");
  myRequest.setRequestHeader("wx", "385");
 myRequest.send(null);

 return myRequest;
}

function xml_loaded(request, callback) {
   if(request.readyState === 4) {
       //... only then do your processing
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...