日期:2014-05-18  浏览次数:20393 次

急救,一个在IE和FF下的Dom的奇怪问题。
返回的内容是:

<Content   Version= "1.0 ">
<MessageCode> 3 </MessageCode>
<MessageString> 0.3249516 </MessageString>
</Content>

============================================
//其他代码没问题的,就是创建XMLHttpRequest,两个浏览器都可以。
function   onReadyState()
{
var   ready   =   REQ.readyState;
if(ready==READY_STATE_COMPLETE){
DOM=REQ.responseXML;
                                    //如果这里创建一个Dom,再load(REQ.responseXML),在FF下连DOM.documentElement都是null了
User_XmlDocument();
}else{
//loading......
}
}


function   User_XmlDocument()
{
var   XmlRoot   =   DOM.documentElement;
                  在ie下:
                  XmlRoot   的childNodes.length是2;
                  XmlRoot.childNodes[0],XmlRoot.childNodes[1],这样获取正常。

                  在FF下:
                  XmlRoot   的childNodes.length是5;
                  XmlRoot.childNodes[1],XmlRoot.childNodes[3],这样获取正常。

//郁闷的就在这里,为什么REQ.responseXML的结果一样,但在ie和ff下,XmlRoot的子节点的长度一个是2,一个是5?
而且在FF下,为什么是子节点1和3,不是0,1??????
极度郁闷!!
请高手看看,为什么?
}


------解决方案--------------------
关注
------解决方案--------------------
FF没用过。帮顶

------解决方案--------------------
不知道有没有在创建XmlHttpRequest对象的时候判断浏览器的类型
从而创建不同的XmlHttpRequest对象
------解决方案--------------------
疑点一:
你没有在创建XmlHttpRequest对象的时候去判断是否是FF
代码如下
if(window.XMLHttpRequest)
{
//Mozilla 浏览器
xRequest= new XMLHttpRequest();
if(xRequest.overrideMimeType)
{
//设置 MIME 类别
xRequest.overrideMimeType( "text/html ");
}

疑点二:
DOM=REQ.responseXML;//这句话,也不知道你的DOM是在哪申明的
========
IE和FF中创建xmlDom的方法不同。
FF中创建
var Dom= [ "MSXML2.DOMDocument ", "Microsoft.XMLDOM ", "MSXML.DOMDocument ", "MSXML3.DOMDocument "];
IE中创建xmlDom申明
var Dom = new ActiveXObject( "Microsoft.XmlDom ");