文章类型: .NET
关键词: ajax,responseText有值,responseXml为null,responseXML,null,.net,C#
内容摘要: 主要介绍在js中用ajax时遇到解析xml格式数据时出现的responseXml的值为null的原因分析及其解决思路方案

ajax responseXml responseXML null取不到值问题的原因分析及其解决方案

2015/7/14 17:19:26    来源:apple    阅读:

问题描述:客户端使用Ajax向服务器请求的时候,服务器返回的数据responseText有内容,但返回的responseXML为空。

 

解决方法:

1、服务端没有设置返回的内容格式,因为response默认返回格式为"text/html",要把它改为response.ContentType="text/xml",才能正确解析。

2、xml的内容格式不正确,可以通过将xml的内容输出,好好检查xml的格式是否正确,本人因为在aspx页面设置了Trace=true进行调试,结果在返回的XML片段中附件了一大堆调试信息,从而破坏了XML的格式,导致客户端无法获得responseXML对象。注意对于IE浏览器responseXml可以使用,其他非IE不能使用responseXml属性,但responseXML对于浏览器通用。

3、 另外,xml的内容数据格式正确,我在.net的使用中,出现了在IE下能够正确获取到responseXml的数据并可以正确的解析,但是非IE,如360浏览器等得到responseXml的数据为null的问题,此时通过调试,并不是xml的数据格式有问题,此时用另一种解决方案来解决这个问题,详见 利用ajax技术实现动态双组合功能

解决思路如下:

 // 2. 设置回调函数
    xhr.onreadystatechange = function () {

        if (xhr.readyState == 4 && xhr.status == 200) {
            //alert(xhr.responseText);
            var html = "";
            var data;
            if (xhr.responseXml != null) {//IE浏览器
                alert(xmlToString(xhr.responseXml));
                data = xhr.responseXml.getElementsByTagName("ArticleComment");
            } else if (xhr.responseXML != null) {//非IE,如360浏览器
                //alert(xmlToString(xhr.responseXML));
//                retText = xhr.responseText;
//                retText = retText.substr(0, 19) + retText.substr(36);
                data = xhr.responseXML.getElementsByTagName("ArticleComment");
            }

            if (data.length > 0) {
                for (var i = 0; i < data.length; i++) {
                    html += renderItem(data[i]);
                }
            }

            document.getElementById("commentContent").innerHTML = html;
            //$('#commentContent').html(html);

            //取到数据后将当前页更新
            currentPageIndex = pageIndex;
        }
    };
    
    
    function renderItem(data) {
//    alert(xmlToString(data));
    //alert(data.getElementsByTagName("FaceUrl")[0].textContent);
    var html = "<div class='t'><div class='tt'><div class='tt1'>";
    html += "<img src='../static/images/face/" + getElementContent(data, "FaceUrl") + "' />"; //FaceUrl
    html += "&nbsp;评论者匿称:" + getElementContent(data, "LoginName") + "</div>"; //Author
    html += "<div align='right'>";
    html += "<div align='right'>";
    //联系地址
    html += "<div id='f" + getElementContent(data, "RowNo") + "' class='userinfo' style='display: none'>"
                + "<p><label>IP地址:</label><label>" + getElementContent(data, "HostIP") + "</label></p>"
                + "<p><label>姓名:</label><label>" + getElementContent(data, "RealName") + "</label></p>"
                + "<p><label>用户ID:</label><label>" + getElementContent(data, "UserId") + "</label></p>"
                + "<p><label>Mail:</label><label>" + getElementContent(data, "Email") + "</label></p></div></div>";
    html += "</div></div><div>";
    html += "<div class='tt2'><div align='left' class='tt3'>" + getElementContent(data, "CommentContent") + "</div>"; //Content
    html += "<div class='gray' align='right'>" + getElementContent(data, "RowNo") + "# 发表于:" + getElementContent(data, "CommentDate") + "&nbsp;</div>"; //RowNo PostTime
    html += "</div></div></div>";
    return html;
}

function getElementContent(element, tagName) {
    var childElement = element.getElementsByTagName(tagName)[0];
    return (childElement.text != undefined) ? childElement.text : childElement.textContent;
}
↑ 上一篇文章:js将String解析成xml数据格式、xml数据格式转化为String 关键词:xml,string,javascript,js,转换 发布日期:2015/7/14 17:17:14
↓ 下一篇文章:JavaScript 和 .NET 中的 JSON 关键词:js,JavaScript,.net,C#,json 发布日期:2015/7/14 17:26:00
相关文章:
利用ajax技术实现动态双组合功能 关键词:.net,js,javascript,ajax,XMLHttpReuqest,responseX.. 发布日期:2015-07-14 17:11
ASP.NET中的分页剖析(一) 关键词:C#,ASPX,ASP,.NET中,分页 发布日期:2015-07-29 12:19
.NET 三层架构 第五章 业务的扩展:三层架构(视频及上课练习代码) 关键词:C#,.NET,分层,开发,三层,架构 发布日期:2015-07-28 11:48
相关目录:.NETDATABASEJAVAJAVASCRIPTHTML软件开发
我要评论
正在加载评论信息......