我正在尝试使用 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()){
谁能建议我哪里出错了。
提前致谢!
你正在这样做:
z=childs[i].childNodes;
然后,在第一行adChilds(z,childs,oNode);
,你正在这样做:
if(a[i].hasChildNodes()){
But, i
不是子项的索引a
。它是 a 的孩子的父母的索引。因此,如果父母a
没有相同数量的孩子a
有孩子,你就会超出索引。
我不知道你到底想在 adChilds() 中完成什么,所以我不确定建议什么修复,但我假设你如果想处理 adChilds() 的孩子a
,你应该得到孩子的数量a
并确保您只访问实际存在的号码
一些编码建议:
我强烈建议您使用真实的变量名称。名字像a
, b
, c
and z
因为中间变量是神秘的,使您的代码难以阅读。
所有局部变量前面应带有var
在第一次定义时(或在函数顶部定义),否则它们将成为全局变量,这会带来麻烦,尤其是对于异步回调函数。
当您在第一次检查代码时发现一些不明显的错误时,请在您最喜欢的调试器中设置一个断点,单步执行代码并检查变量的状态,以准确了解出现错误的原因。如果您不知道如何使用调试器,请学习。它们内置于大多数浏览器中,非常简单,而且对于高效调试来说绝对必要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)