JavaScript XML Parsing在IE中工作,但在Firefox / Chrome中不工作

时间:2012-06-12 18:06:50

标签: javascript xml internet-explorer google-chrome

我在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;

这两者似乎都可行。

但我欢迎任何“适当”的解决方案。

干杯,

戴夫。

1 个答案:

答案 0 :(得分:0)

这发生了一个标题问题 - 愚蠢的是我没有将XML生成中的输出头设置为text / xml。虽然IE并不关心FF和Chrome。

在PHP中设置Content-type标头解决了它。