2010-08-22 41 views
2

我无法访问ajax连接中的数据。不知道我的代码有什么问题。似乎它从来没有达到第二个功能。有任何想法吗?带有回调函数的AJAX

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

回答

3

那的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 
    } 
} 
+0

尝试,已经......我得到一个错误,从浏览器......“要完成该操作中的数据尚不可用” – cameron213 2010-08-22 03:02:45

+0

你将不得不为myRequest.readystate chech,并且只能在ready状态为4时进行处理。请检查我的答案。 – naikus 2010-08-22 03:07:09

+0

至少让我进一步说我以前。我添加了这个if((request.readyState == 4)&&(request.status == 200)。但是我没有达到这些状态并且向回调抛出一个错误。不知道为什么,如果我做了一个不同的 – cameron213 2010-08-22 03:22:09