2010-09-03 74 views
0

我試圖從一個url抓取一個xml文檔,然後解析它。我可以在瀏覽器上打開它,但它似乎無法通過我的JavaScript工作。誰能幫我?javascript XMLHttpRequest requestXML爲空

function downloadUrl(url, callback) {  
    var request = window.ActiveXObject ? 
     new ActiveXObject('Microsoft.XMLHTTP') : 
     new XMLHttpRequest; 

    request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
     request.onreadystatechange = function(){}; 
     callback(request, request.status); 
     } 
    }; 

    request.open('GET', "url", true);  
    request.send(null); 
} 
downloadUrl("http://jojo.theone.net/survey.xml", function(data) { 
    alert("Inside downloadURL"); // shows up    
    var xml = request.responseXML; 
    alert(xml); // Doesn't even show up. 
     alert(request.responseText); // Doesnt show up. 


}); 
+1

是'jojo.theone.net'運行腳本? – 2010-09-03 17:09:00

回答

0

嘗試使用data值不是request對象。此外,最好使用像Mootools或jQuery這樣的框架來執行AJAX請求 - 您將獲得更加兼容和可預測的界面。
另請注意,如果您請求的網址與發出請求的腳本具有不同的服務器,端口和協議,請求將失敗。

+0

該URL確實與腳本具有不同的端口。有沒有辦法解決? – John 2010-09-03 17:15:49

+0

不 - 這會被認爲是一個嚴重的安全漏洞,所以沒有瀏覽器會這樣做。你必須在服務器端創建一個路由器,並解決一些將被重寫到不同端口的url。 – mbq 2010-09-03 19:53:15

2

您在回調方法中使用data作爲參數名稱,但將回調方法調用爲callback(request, request.status)。結果是請求對象現在在名爲「data」的var中,並且根本沒有引用request.status。

嘗試

downloadUrl("http://jojo.theone.net/survey.xml", function(request, status) { 
    alert("Inside downloadURL"); 
    var xml = request.responseXML; 
    alert(xml); 
    alert(request.responseText); 
});