级别: 新手上路
UID: 22522
精华: 0
发帖: 19
威望: 20 点
金钱: 190 RMB
贡献值: 0 点
注册时间: 2007-04-14
最后登录: 2009-04-28
楼主  发表于: 2008-10-14 12:26

 Ajax的responseXML对象在Firefox中的问题

由于传送的数据比较复杂,用普通的字符串不容易解析,所以没用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数据解析出来?