(IE,FF)Dom的问题!!!

Dleno 2007-06-15 10:50:35
返回的内容是:

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

============================================

function onReadyState()
{
var ready = REQ.readyState;
if(ready==READY_STATE_COMPLETE){
DOM=REQ.responseXML
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??????
极度郁闷!!
请高手看看,为什么?
}
...全文
336 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
amangoing 2008-12-26
  • 打赏
  • 举报
回复
deninghe 2007-06-20
  • 打赏
  • 举报
回复
在ie下:
XmlRoot 的childNodes.length是2;
XmlRoot.childNodes[0],XmlRoot.childNodes[1],这样获取正常。

在FF下:
XmlRoot 的childNodes.length是5;
XmlRoot.childNodes[1],XmlRoot.childNodes[3],这样获取正常。
==========================================================
FF下在两个元素节点之间有一个空白的文本节点 nodeType=3 过滤一下就行了
Dleno 2007-06-18
  • 打赏
  • 举报
回复
再顶
Dleno 2007-06-15
  • 打赏
  • 举报
回复
function User_XmlDocument()
{
//var FF=false;
var XmlRoot = OX120_DOM.documentElement;
//................
}
Dleno 2007-06-15
  • 打赏
  • 举报
回复
OX120_DOM=OX120_REQ.responseXML;
//这里已经得到了Dom,
用getXMLString(OX120_DOM.documentElement),得到的字符串正是:(ie,ff都可以)
<Content>
<MessageCode>3</MessageCode>
<MessageString>0.3249516</MessageString>
</Content>
============
function getXMLString(oNode) {
if(typeof XMLSerializer != "undefined"){
var oSerializer = new XMLSerializer();
return oSerializer.serializeToString(oNode);
}else{
return oNode.xml;
}
}
Dleno 2007-06-15
  • 打赏
  • 举报
回复
我现在把代码都贴出来,Dom和XMLHttpRequest都是没有问题的
var OX120_REQ=null;
var OX120_DOM=null;
var READY_STATE_UNINITIALIZED=0;
var READY_STATE_LOADING=1;
var READY_STATE_LOADED=2;
var READY_STATE_INTERACTIVE=3;
var READY_STATE_COMPLETE=4;

function getXmlHttpRequest(){
var xRequest=null;
if(window.XMLHttpRequest){
xRequest=new XMLHttpRequest();
}else if(typeof ActiveXObject != "undefined"){
try {
xRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {xRequest=null;}
}
}
return xRequest;
}

function sendRequest(url,HttpMethod,Prams){
if(!HttpMethod){
HttpMethod="GET";
}
OX120_REQ=getXmlHttpRequest();
if(OX120_REQ){
OX120_REQ.onreadystatechange = onReadyState;
OX120_REQ.open(HttpMethod,url,true);
OX120_REQ.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
OX120_REQ.send(Prams);
}else{
alert("XmlHttpRequest object Error!");
}
}

function onReadyState()
{
var ready = OX120_REQ.readyState;
if(ready==READY_STATE_COMPLETE){
//try{
//OX120_DOM=getXmlDocument();
OX120_DOM=OX120_REQ.responseXML;
//OX120_DOM.load(OX120_REQ.responseText);
User_XmlDocument();
//OX120_DOM.loadXML(OX120_REQ.responseXML.xml);
//}catch(e){alert("XmlDocument object Error!")}

}else{
//loading......
}
}

function getXmlDocument(){
var xDom=null;
if(document.implementation && document.implementation.createDocument)
{
xDom=document.implementation.createDocument("","",null);//Mozilla/Safari
}else if(typeof ActiveXObject != "undefined"){
var msXmlAx=null;
try{
msXmlAx=new ActiveXObject("Msxml2.DOMDocument");//new IE
}
catch(e){
msXmlAx=new ActiveXObject("Msxml.DOMDocument");// old IE
}
xDom=msXmlAx;
}
if(xDom == null || typeof xDom.load=="undefined"){
xDom=null;
}
return xDom;
}
zhulei2008 2007-06-15
  • 打赏
  • 举报
回复
楼主好像发了两贴,

我最后的结果

疑点一:
你没有在创建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");
zhulei2008 2007-06-15
  • 打赏
  • 举报
回复
IE和FF中创建Dom的方法是不同的。这点楼主有没有考虑到??
FF中创建
var Dom= ["MSXML2.DOMDocument", "Microsoft.XMLDOM", "MSXML.DOMDocument", "MSXML3.DOMDocument"];
51dianying 2007-06-15
  • 打赏
  • 举报
回复
5.0,6.0都有。但是一般的来说,从4.0升级直接到6.0了。
zzxiaoma 2007-06-15
  • 打赏
  • 举报
回复
没明白什么意思,如果有冲突的话,就改变一下方法,使用统一的办法
zhulei2008 2007-06-15
  • 打赏
  • 举报
回复

new ActiveXObject("Microsoft.XMLDOM");
默认的XMLDOM

new ActiveXObject("MSXML2.DOMDocument");
XML DOM 1。0版?好象是默认的XML DOM版本,我不确定。

new ActiveXObject("Msxml2.DOMDocument.2.0");
XML DOM 2。0版

new ActiveXObject("Msxml2.DOMDocument.3.0");
XML DOM 3。0版

new ActiveXObject("MSXML2.DOMDocument.4.0");
XML DOM 4。0版

new ActiveXObject("Msxml2.DOMDocument.5.0");
这个版本似乎还没发行。
===================
也没说根据浏览器的不同去创建不同的Dom,这些资料楼主参考
zhulei2008 2007-06-15
  • 打赏
  • 举报
回复
DOM=REQ.responseXML
=================
IE情况下我觉得要加上 Dom = new ActiveXObject("Microsoft.XmlDom");


不知道对于FF有没有创建的时候的声明
Dleno 2007-06-15
  • 打赏
  • 举报
回复
<MessageCode>3</MessageCode>
<MessageString>0.3249516</MessageString>

我是要获得MessageCode和MessageString的值,
在IE下可以用:
XmlRoot.childNodes[0].nodeValue来获得MessageCode的值
XmlRoot.childNodes[1].nodeValue来获得MessageString的值
但在FF下却只能
XmlRoot.childNodes[1].nodeValue来获得MessageCode的值
XmlRoot.childNodes[3].nodeValue来获得MessageString的值
而且XmlRoot的子节点个数成5了。
Dleno 2007-06-15
  • 打赏
  • 举报
回复
XmlHttpRequest和 Dom是适应这两种浏览器的。
那个不会有问题。
现在是结果已经获得,但:

在ie下:
XmlRoot 的childNodes.length是2;
XmlRoot.childNodes[0],XmlRoot.childNodes[1],只能这样这样获取。

在FF下:
XmlRoot 的childNodes.length是5;
XmlRoot.childNodes[1],XmlRoot.childNodes[3],能这样这样获取。而0,2,4都没有值
zhulei2008 2007-06-15
  • 打赏
  • 举报
回复
在创建XmlHttpRequest对象的时候有没有去判断
浏览器的类型呢?
Dleno 2007-06-15
  • 打赏
  • 举报
回复
怎么在ajax区也没人回答??
gauzxj 2007-06-15
  • 打赏
  • 举报
回复
up

52,782

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧