问题描述:客户端使用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") + "
html += "
html += "
//联系地址
html += "
+ "
IP地址:" + getElementContent(data, "HostIP") + "
"+ "
姓名:" + getElementContent(data, "RealName") + "
"+ "
用户ID:" + getElementContent(data, "UserId") + "
"+ "
Mail:" + getElementContent(data, "Email") + "
html += "
html += "
html += "
html += "
return html;
}
function getElementContent(element, tagName) {
var childElement = element.getElementsByTagName(tagName)[0];
return (childElement.text != undefined) ? childElement.text : childElement.textContent;
}