使用IE 8在Javascript中遍历空/未定义的XML节点

使用IE 8在Javascript中遍历空/未定义的XML节点,javascript,internet-explorer-8,undefined,xmlnode,Javascript,Internet Explorer 8,Undefined,Xmlnode,老一套:有些东西在Firefox/Chrome中有效,但在IE中不起作用 var reason = ''; if (data.documentElement.getElementsByTagName("DNFReason")[0].childNodes[0] !== undefined) { reason = data.documentElement.getElementsByTagName("DNFReason")[0].childNodes[0].nodeValue; } 这是我找到的

老一套:有些东西在Firefox/Chrome中有效,但在IE中不起作用

var reason = '';
if (data.documentElement.getElementsByTagName("DNFReason")[0].childNodes[0] !== undefined)
{   reason = data.documentElement.getElementsByTagName("DNFReason")[0].childNodes[0].nodeValue; }
这是我找到的第一个可行的解决方案,用于从Javascript中的XML文档中获取XML节点的值,因此我很遗憾它显然在IE中不起作用

如果节点有一个值,它可以正常工作,因此问题显然是由空/未定义的节点引起的

有人对此有什么看法吗?我也在寻找一种稍微不那么冗长的编码方式(可能是在jQuery中),但我受到时间限制,没有时间进行必要的研究

添加了完整的ajax请求:

            $.ajax({
                type: "GET",
                url: "SheriffWS.asmx/GetGroupByID",
                data: 'GroupID=' + $("#<%=Groups.ClientID() %>").val(),
                dataType: "xml",
                success: function(data) {
                    var gtype = '';
                    var reason = '';
                    var nme = '';
                    var ttype = '';
                    var ttypeid = 0;

                    if (data.documentElement.getElementsByTagName("Type")[0].childNodes[0] !== undefined) {
                        gtype = data.documentElement.getElementsByTagName("Type")[0].childNodes[0].nodeValue;
                    }

                    if (data.documentElement.getElementsByTagName("Name")[0].childNodes[0] !== undefined) {
                        nme = data.documentElement.getElementsByTagName("Name")[0].childNodes[0].nodeValue;
                    }

                    if (data.documentElement.getElementsByTagName("DNFReason")[0].childNodes[0] !== undefined) {
                        reason = data.documentElement.getElementsByTagName("DNFReason")[0].childNodes[0].nodeValue;
                    }

                    if (data.documentElement.getElementsByTagName("TestName")[0].childNodes[0] !== undefined) {
                        ttype = data.documentElement.getElementsByTagName("TestName")[0].childNodes[0].nodeValue;
                    }

                    if (data.documentElement.getElementsByTagName("TestTypeID")[0].childNodes[0] !== undefined) {
                        ttypeid = data.documentElement.getElementsByTagName("TestTypeID")[0].childNodes[0].nodeValue;
                    }

                    $("#groupinfo-name").val(nme);
                    $("#hid-name").val(nme);

                    $("#groupinfo-type").val(gtype);
                    $("#groupinfo-testtype").val(ttype);
                    $("#groupinfo-testtypeid").val(ttypeid);
                    if (data.documentElement.getElementsByTagName("DNF")[0].childNodes[0].nodeValue == 'false') {
                        $("#groupedit-dnf").removeAttr('checked');
                        $("#groupedit-dnf-li").hide();
                    }
                    else {
                        $("#groupedit-dnf").attr('checked', 'checked');
                        $("#groupedit-dnf-li").show();
                    }

                    $("#<%=GroupEditDNFReason.ClientID() %>").val(reason);
                    $("#hid-dnfreason").val(reason);
                },
                error: function(msg) {

                }

            });
$.ajax({
键入:“获取”,
url:“SheriffWS.asmx/GetGroupByID”,
数据:“GroupID=”+$(“#”)val(),
数据类型:“xml”,
成功:功能(数据){
var gtype='';
var理性=“”;
var nme='';
var ttype='';
var ttypeid=0;
if(data.documentElement.getElementsByTagName(“类型”)[0].childNodes[0]!==未定义){
gtype=data.documentElement.getElementsByTagName(“类型”)[0].childNodes[0].nodeValue;
}
if(data.documentElement.getElementsByTagName(“名称”)[0].childNodes[0]!==未定义){
nme=data.documentElement.getElementsByTagName(“名称”)[0].childNodes[0].nodeValue;
}
if(data.documentElement.getElementsByTagName(“DNFReason”)[0].childNodes[0]!==未定义){
原因=data.documentElement.getElementsByTagName(“DNFReason”)[0].childNodes[0].nodeValue;
}
if(data.documentElement.getElementsByTagName(“TestName”)[0].childNodes[0]!==未定义){
ttype=data.documentElement.getElementsByTagName(“TestName”)[0].childNodes[0].nodeValue;
}
if(data.documentElement.getElementsByTagName(“TestTypeID”)[0].childNodes[0]!==未定义){
ttypeid=data.documentElement.getElementsByTagName(“TestTypeID”)[0]。childNodes[0]。nodeValue;
}
$(“#组信息名称”).val(nme);
$(“#hid name”).val(nme);
$(“#groupinfo type”).val(gtype);
$(“#groupinfo testtype”).val(ttype);
$(“#groupinfo testtypeid”).val(ttypeid);
if(data.documentElement.getElementsByTagName(“DNF”)[0].childNodes[0].nodeValue==“false”){
$(“#groupedit dnf”).removeAttr('checked');
$(“#groupedit dnf li”).hide();
}
否则{
$(“#groupedit dnf”).attr('checked','checked');
$(“#groupedit dnf li”).show();
}
$(“#”)val(原因);
$(“#hid dnfreason”).val(原因);
},
错误:函数(msg){
}
});

IE中什么“不起作用”?它会抛出错误吗?它是否返回空值?将
data.documentElement.getElementsByTagName(“DNFReason”)[0].childNodes[0]
的结果存储在一个变量中可能是有意义的,而不是运行两次,因为它会抛出一个错误;奇怪的是,它将其放入jQuery 1.6.4 min文件(标准的“预期对象”错误)。这位于ajaxget请求的成功回调中,它是Select元素上的更改事件回调的一部分。我不认为这是它抛出错误的原因;我只是不想把事情复杂化。你仍然没有解释发生了什么。如果它在jQuery中抛出了一个错误,这意味着它不是这段代码(这里没有任何jQuery)。既然您已经在使用jQuery来实现AJAX,那么不妨使用它来遍历这个XML。我肯定会在你的问题中包括你完整的
$.ajax()
调用…很多事情可能会影响这一点。这是在ajax请求中。我已经用完整的代码更新了我的问题,尽管我已经将错误的来源缩小到了我在问题中提到的代码行,所以我真的不认为额外的代码对你的事业有任何帮助。我曾经多次在jQuery脚本中抛出错误,而错误的来源与jQuery无关,因此我不确定您将如何处理该错误。我还说,我受到时间限制,而且是以我知道的唯一方式这样做的。如果我知道如何使用jQuery,我会这样做。要使用jQuery,首先将
data
jQuery对象设置为:
data=$(data)。然后,要获取您要查找的特定内容,请尝试:
gtype=data.find(“Type”).first().children().first().text()。取决于您的XML结构/内容。无需使用
if
语句,只需设置变量即可。如果找不到元素,或者元素没有内容,则将使用空字符串。显然,这可以应用于变量设置的其余部分。