0

私のスクリプトは 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 で要求を行うと、新しく作成されたテーブルにデータが表示され、エンティティごとに 1 行、フィールドごとに 1 列が表示されます。

ただし、Firefox と Chrome では、リクエストは正常に呼び出され、エラーは発生しませんが、nodeValues として空の文字列が返されます。たとえば、(正しい数の) 行と列のそれぞれに () しかありません。

私は本当に愚かであると確信しています。どんな助けでも大歓迎です。

乾杯、

デイブ。

** 答えてほしいのですが、あと 7 時間は自分の質問に答えることができません **

質問してからすぐに、答えにつまずいたようです...

テキストコンテンツ

これはFirefoxやChromeでテキストデータに使われている属性のようです(CDATAタグで囲まれていたので推測)。ただし、コードを fields[z].textContent に変更すると、IE が壊れます。

だから私は次のことをしました:

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

両方でうまくいくようです。

しかし、私は「適切な」解決策を歓迎します。

乾杯、

デイブ。

4

1 に答える 1

0

これはヘッダーの問題であることが判明しました。愚かなことに、XML 生成で出力ヘッダーを text/xml に設定していませんでした。IEはFFを気にしませんでしたが、Chromeは気にしました。

PHP で Content-type ヘッダーを設定すると解決しました。

于 2013-03-10T00:54:10.503 に答える