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

问题描述:客户端使用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 

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 = "

";

    html += ""; //FaceUrl

html += " 评论者匿称:" + getElementContent(data, "LoginName") + "

"; //Author

html += "

";

html += "

";

//联系地址

html += "

"

+ "

IP地址:" + getElementContent(data, "HostIP") + "

"

+ "

姓名:" + getElementContent(data, "RealName") + "

"

+ "

用户ID:" + getElementContent(data, "UserId") + "

"

+ "

Mail:" + getElementContent(data, "Email") + "

";

html += "

";

html += "

" + getElementContent(data, "CommentContent") + "
"; //Content

html += "

" + getElementContent(data, "RowNo") + "# 发表于:" + getElementContent(data, "CommentDate") + " 
"; //RowNo PostTime

html += "

";

return html;

}

function getElementContent(element, tagName) {

var childElement = element.getElementsByTagName(tagName)[0];

return (childElement.text != undefined) ? childElement.text : childElement.textContent;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值