1

我正在尝试在 jquery 中使用 ajax 请求读取 XML。下面是代码,它在 IE 中运行良好,但是当我在 Chrome 上运行它时,我遇到了这个错误

未捕获的类型错误:无法调用未定义的方法“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子级数量与a拥有子级的数量不同,则您将超出索引。

我不确切知道您要在 adChilds() 中完成什么,所以我不确定要建议什么修复方法,但我假设您如果要处理 的孩子a,您应该获得孩子的数量并a确保您只访问实际存在的号码


一些编码建议:

  1. 我强烈建议你使用真正的变量名。像a,b和中间变量这样的名称是晦涩难懂的cz使您的代码难以阅读。

  2. 所有局部变量都应该var在第一次定义之前(或在函数顶部定义),否则它们会成为自找麻烦的全局变量,尤其是异步回调函数。

  3. 当您在第一次检查代码时看到对您来说并不明显的错误时,请在您最喜欢的调试器中设置一个断点并单步执行代码并检查变量的状态,以了解您收到错误的确切原因。如果您不知道如何使用调试器,请学习。它们内置于大多数浏览器中,对于高效调试来说非常简单且绝对必要。

于 2013-02-04T05:52:34.077 回答