2012-06-12 149 views
0

我的腳本在IE瀏覽器中運行,但Firefox/Chrome瀏覽器(這很奇怪),我有以下XML解析問題。當然,這是一件非常愚蠢的事,但我非常感激。JavaScript XML解析適用於IE瀏覽器,但不適用於Firefox/Chrome

下面的JavaScript函數:

this.displayData = function(xml) 
{ 
    var table = document.createElement("table"); // table for results 
    table.border=0; 
    table.width="100%"; 
    table.classname="requestList"; 

    var container = document.getElementById('mainright'); 

    if (container.hasChildNodes()) 
    { 
     while(container.childNodes.length >= 1) 
      container.removeChild(container.firstChild); 
    } 

    container.appendChild(table); 

    var entities = xml.getElementsByTagName("entity"); 

    for (var i=0; i<entities.length; ++i) 
    { 
     var entity = entities[i]; 
     var row = table.insertRow(table.getElementsByTagName("tr").length); 
     var fields = entity.getElementsByTagName("field"); 

     for (var z=0; z<fields.length; ++z) 
     { 
      var cell = row.insertCell(z); 
      cell.innerHTML = "("+fields[z].childNodes[0].nodeValue+")"; 
     } 
    } 
} 

是被稱爲一個XMLHTTP回調和XML似乎有效。 XML輸出的樣本:

<data-list> 
<entity entity=""> 
<field field="requestid"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="customer"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="assignteam"> 
<![CDATA[ 0 ]]> 
</field> 
<field field="assignuser"> 
<![CDATA[ admin ]]> 
</field> 
<field field="class"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="openeddt"> 
<![CDATA[ 2012-06-11 19:39:26 ]]> 
</field> 
<field field="status"> 
<![CDATA[ 1 ]]> 
</field> 
</entity> 
<entity entity=""> 
<field field="requestid"> 
<![CDATA[ 2 ]]> 
</field> 
<field field="customer"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="assignteam"> 
<![CDATA[ 0 ]]> 
</field> 
<field field="assignuser"> 
<![CDATA[ admin ]]> 
</field> 
<field field="class"> 
<![CDATA[ 1 ]]> 
</field> 
<field field="openeddt"> 
<![CDATA[ 2012-06-11 19:40:02 ]]> 
</field> 
<field field="status"> 
<![CDATA[ 1 ]]> 
</field> 
</entity> 
</data-list> 

在IE當我使一個新創建的表它顯示數據的請求,每個實體一行和每場一列。

但是,在Firefox和Chrome中,請求被稱爲罰款,並且不會生成錯誤,但會返回空字符串作爲nodeValues,例如,我得到的每個(正確數量的)行和列都是()。

我相信我只是很愚蠢。任何幫助非常感謝。

乾杯,

戴夫。

**答案,我希望,但我不能回答我的問題另外7小時**

右鍵所以問我似乎對答案無意中發現後一分鐘...

的textContent

這似乎是Firefox和Chrome中用於文本數據的屬性(我假設是因爲它被封裝在CDATA標籤中)。但是,將代碼更改爲字段[z] .textContent則會中斷IE。

所以我做了以下內容:

var data = (fields[z].textContent == undefined) ? fields[z].firstChild.nodeValue : fields[z].textContent; 
cell.innerHTML = data; 

這似乎是工作在這兩個確定。

但我會歡迎任何「適當的」解決方案。

乾杯,

戴夫。

+0

P.S.我得到了與[z] .firstChild.nodeValue以及實體[i] .childNodes [z]相同的響應... – Dave

回答

0

這發生了一個頭問題 - 愚蠢我沒有將輸出頭設置爲XML-generation爲text/xml。雖然IE並不關心FF和Chrome。

在PHP中設置Content-type頭解決了它。

相關問題