1

jqueryでajaxリクエストを使用してXMLを読み取ろうとしています。以下はコードです。IEでは正常に動作していますが、Chromeでこれを実行すると、このエラーが発生します。

Uncaught TypeError:未定義のメソッド'hasChildNodes'を呼び出すことができません

$.ajax({

    type: "GET",
    url: "tree1.xml",
    dataType:"xml",
    success: function(xml){
        root=xml.documentElement;
        childs=root.childNodes;
        for(var i=0;i<childs.length;i++){
            z=childs[i].childNodes;
            adChilds(z,childs,oNode);


            function adChilds(a,b,c){
                if(a[i].hasChildNodes()){
                    adNode(b[i].nodeName,c);
                    var oNode_ch=oNode1;
                    for(var j=0;j<a.length;j++){
                        child1=a[j].childNodes;
                        adNode(child1[0].nodeValue,oNode_ch);
                    }
                }
                else{adNode(a[0].nodeValue,oNode);}
            }
        }

エラーはこの行を指しています。

if(a [i] .hasChildNodes()){

誰かが私がどこで間違っているのか私に提案できますか?

前もって感謝します!

4

1 に答える 1

2

あなたはこれをやっています:

z=childs[i].childNodes;

次に、の最初の行でadChilds(z,childs,oNode);、これを実行しています。

if(a[i].hasChildNodes()){

しかし、iの子へのインデックスではありませんa。これは、の子の親へのインデックスです。したがって、の親にa子と同じ数の子がない場合aは、インデックスから外れます。

adChilds()で何を達成しようとしているのか正確にはわからないため、どの修正を提案すればよいかわかりませんが、の子を処理する場合は、子aの数を取得する必要があると思います。のa、実際に存在する番号にのみアクセスするようにしてください


いくつかのコーディングの提案:

  1. 実際の変数名を使用することを強くお勧めします。a、、、および中間変数bの名前はわかりにくいため、コードが読みにくくなります。cz

  2. すべてのローカル変数の前varに最初の定義(または関数の先頭で定義)を付ける必要があります。そうしないと、特に非同期コールバック関数で問題が発生するグローバル変数になります。

  3. コードを最初に調べたときに明らかでないエラーが表示された場合は、お気に入りのデバッガーにブレークポイントを設定し、コードをステップ実行して変数の状態を調べ、エラーが発生した理由を正確に確認します。デバッガーの使用方法がわからない場合は、学習してください。これらはほとんどのブラウザに組み込まれており、効率的なデバッグには簡単で絶対に不可欠です。

于 2013-02-04T05:52:34.077 に答える