2010-08-22 99 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