2010-08-22 5 views
2

J'ai des difficultés à accéder aux données dans une connexion ajax. Je ne sais pas quel est le problème avec mon code. Il semble que cela n'atteigne jamais la 2ème fonction. Des idées?AJAX avec fonctions de rappel

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

Répondre

3

Cest request.onreadystatechange au lieu de 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 
    } 
} 
+0

Essayé déjà ... Je reçois une erreur du navigateur .... « Les données nécessaires pour effectuer cette opération est pas encore disponible » – cameron213

+0

Vous devra chech pour myRequest.readystate et seulement faire le traitement lorsque l'état prêt est 4. Vérifiez ma réponse. – naikus

+0

Cela m'a au moins appris que j'étais avant. J'ai ajouté ceci si ((request.readyState == 4) && (request.status == 200) .Mais je n'atteins pas ces états et jette une erreur au callback.Sais pas pourquoi, si je le fais un différent – cameron213