由于传送的数据比较复杂,用普通的字符串不容易解析,所以没用responseText对象(当然该对象在ie和firefox中都可以成功接收数据,我已测试过),
而是在服务端生成一个xml格式的字符串返回到客户端,客户端用responseXML来取得相应对象,经过测试在IE中成功!
但是在firefox下,responseXML返回的是null,相关代码如下,请高手们指点一下,谢谢!
//生成XMLrequest对象,已经考虑了浏览器到版本问题
function createXMLHttpRequest() {
if(window.XMLHttpRequest) {
var http_request = new XMLHttpRequest();
if(http_request.overrideMimeType) http_request.overrideMimeType("text/html");
} else if(window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
alert(e);
}
}
}
if(http_request == null) alert("您的浏览器不支持Ajax!");
return http_request;
}
//处理响应函数
function processRequest() {
if(http_request == null) return;
if(http_request.readyState == 4) {
if(http_request.status == 200) {
alert(http_request.responseText); //这里在ie和firefox下都可以打印出服务端生成的xml文本
alert(http_request.responseXML); //firefox是null,而ie中是[object]
//考虑到ie和firefox的兼容问题,我家了如下代码,希望将xml文本转换成xml对象
if(xmlDoc == null) {
parser = new DOMParser();
xmlDoc = parser.parseFromString(http_request.responseText,"text/xml");
}
alert(xmlDoc); //这里虽然是[object xmlDocument],但是下面我开始解析里面的元素却不行了!
}
}
}
以下是我解析的方法,我的xml格式为:
<?xml version='1.0' encoding='UTF-8'?> <!-- 我是严格按照xml格式顶格写的,前面没有空行,和空格 -->
<books>
<book>
<name>设计模式 </name>
<author>steven </author>
</book>
<book>
<name>UML应用 </name>
<author>Jack </author>
</book>
</books>
接着取出的xmlDoc对象,比如我要去第一本书的名字,即(设计模式)
那么,
var book = xmlDoc.getElementsByTagName("book");
var name = book.firstChild.text; //在ie中可以取出“设计模式”,但是firefox中book这个节点都没取到!
请问有什么办法能在firefox中也能成功的将xml数据解析出来?