0

回答: XML ファイルからヘッダー情報を削除すると、問題が解決しました。IEは素晴らしいです!

次のコードは、IE ではなく Firefox と Chrome で機能します。

エラーが発生します

SCRIPT5007: Unable to get value of the property 'childNodes': object is null or undefined.  
line 106, character 3`

106 行目は sort 関数内の最初の行で、'var aCat = a.getElementsByTagName'.... で始まる行です。

ソートされているノードはどれも空ではありませんが、xml ファイル内の同じノード内には空白のノードがいくつかあります (つまり、 でソートしている 、どれも空ではありませんが、電話番号やビーパー番号などを持っていない人もいます.そのため、それらのいくつかは空です)

ソートをtry-catchブロックに入れようとしたとき、IEはノードをまったく読み取らず、すべて例外をスローしました。(繰り返しますが、Chrome と Firefox は try-catch ブロックで動作しました)

私は困惑しています、何かアイデアはありますか?

function populateSection(listType, tableID ) {

if (window.XMLHttpRequest) {/*code for IE7+, Firefox, Chrome, Opera, Safari*/ xmlhttp=new XMLHttpRequest(); }
else {/* code for IE6, IE5*/ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }

var table = tableID;
var list = listType;

xmlhttp.open("GET",'contactlist.xml',false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;

var xmlGet = xmlDoc.getElementsByTagName("PERSON");
var x = Array.prototype.slice.call(xmlGet,0);

x.sort(function(a,b) {
    var aCat = a.getElementsByTagName("LASTNAME")[0].childNodes[0].nodeValue;
    var bCat = b.getElementsByTagName("LASTNAME")[0].childNodes[0].nodeValue;
    if (aCat > bCat) return 1;
    if (aCat < bCat) return -1;
    return 0;
});

//then cycle through the array, adding table rows for each node
...}

編集: xml ファイルの一部を次に示します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CONTACTLIST xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <PERSON>
        <LASTNAME>ALLEN</LASTNAME>
        <FIRSTNAME>Korrie</FIRSTNAME>
        <EMAIL>redacted@evms.edu</EMAIL>
        <PHONE>123456</PHONE>
        <LIST>main</LIST>
    </PERSON>
    <PERSON>
        <LASTNAME>BUESCHER</LASTNAME>
        <FIRSTNAME>Chris</FIRSTNAME>
        <EMAIL>redacted</EMAIL>
        <LIST>main</LIST>
    </PERSON>
    <PERSON>
        <LASTNAME>BUESCHER</LASTNAME>
        <FIRSTNAME>Steve</FIRSTNAME>
        <EMAIL>redacted@evms.edu</EMAIL>
        <PHONE>123456</PHONE>
        <LIST>main</LIST>
        <LABOTHER>123456</LABOTHER>
        <BEEPER>123456</BEEPER>
    </PERSON>
    <PERSON>
        <LASTNAME>CHARTERS</LASTNAME>
        <FIRSTNAME>Michelle</FIRSTNAME>
        <EMAIL>redacted@evms.edu</EMAIL>
        <PHONE>123456</PHONE>
        <LIST>main</LIST>
    </PERSON>
4

1 に答える 1

0

XML が表示されないため、コードが壊れている場所を特定するのに苦労することになりますが、いくつかの推測を以下に示します。

var x = Array.prototype.slice.call(xmlGet,0); これは IE8 では機能せず、IE9 ではバグがある可能性があります。alert(x)オブジェクトが であるかどうかを確認してくださいnull

XML が で始まる場合<?xml version="1.0" encoding="utf-8" ?>、これは IE で実際に壊れる可能性があります。どうしてか分かりません。削除して動作を確認してみてください。

于 2013-08-16T16:35:03.670 に答える