我正在嘗試將XML文件讀取到使用JavaScript的對象,最終解析它以獲取信息並轉換其中的數據。xmlHttp.responseXML似乎爲空 - .responseText被正確填充
XML文件格式正確(在同一個域中),我將它粘貼到了幾個驗證器,並且所有的驗證器都沒有錯誤地返回,所以這不應該是錯誤的根源。
我想通過ajax/xmlHttpRequest訪問文件。以下是有關部分的代碼片段:
if (xmlHttp)
{
var url = xmlFile;
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = function()
{
if (xmlHttp.readyState == 4)
{
//alert(xmlHttp.responseText);
var xmlData = xmlHttp.responseXML;
var txt="";
var x=xmlData.getElementsByTagName("rs:data");
alert(x.length);
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
}
}
xmlHttp.send();
}
現在的問題是,變量「x」總是回來空(長度= 0)。但是,當我提醒responseText時,我可以在警報消息中看到整個xml文件,這對我來說似乎很奇怪。
的xml文件基本上是這樣的:
<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
xmlns:rs='urn:schemas-microsoft-com:rowset'
xmlns:z='#RowsetSchema'>
<s:Schema id='RowsetSchema'>
<s:ElementType name='row' content='eltOnly' rs:CommandTimeout='30'>
<s:AttributeType name='ows_Art' rs:name='Art' rs:number='1'>
<s:datatype dt:type='string' dt:maxLength='512' />
</s:AttributeType>
</s:ElementType>
</s:Schema>
<rs:data>
<z:row [...] />
</rs:data>
</xml>
我要的是節點下存儲的所有數據,並從我能學到
var x=xmlData.getElementsByTagName("rs:data");
應該這樣做。我能想到的唯一原因是.responseXML回到空,但是,沒有確定的方法來檢查,因爲如果我警告(xmlHttp.reponseXML)它只是告訴我,一個對象返回,但不是它...
有沒有人有一個想法,爲什麼這整個事情不起作用?我發現最令人困惑的是,.response文本工作正常......
用console.log(reponseXML)而不是alert(reponseXML)打印reponseXML對象。您將在瀏覽器控制檯中擁有此對象的完整結構。同時檢查服務器返回的MIME類型:它必須是text/xml – Thomas
如何檢查MIME類型?目前我正在使用XAMPP,而不是真正的網絡服務器。除此之外,我已經嘗試了使用content-type作爲text/xml的POST請求。它有相同的結果。我會嘗試console.log。在該說明中,執行時控制檯中沒有錯誤。 – daZza
好的謝謝你的提示。控制檯日誌中有完整的文檔:) – daZza