这几天一直在写AJAX请求服务器返回XML更新到界面上,开始的时候已经作完了,后来上面让兼容FIREFOX浏览器,当用FIREFOX打开的时候晕了,一点效果也没有,在网上找了一下资料,但是对于FIREFOX的支持少之又少,没办法只有自己摸索着去作,今天终于该完了,和大家分享:
AJAX请求服务器的函数封装我在前面已经写过这里就直接用了如果不清楚请浏览这里
假设这是通过AJAX返回的一段XML
<?
xml version=\"1.0\" encoding=\"utf-8\"
?>
< blogshow >
< title > 我的博客 </ title >
< tag >
< item name ="波哥" age ="25" ></ item >
< item name ="一周七天" age ="1" ></ item >
</ tad >
</ blogshow >
< blogshow >
< title > 我的博客 </ title >
< tag >
< item name ="波哥" age ="25" ></ item >
< item name ="一周七天" age ="1" ></ item >
</ tad >
</ blogshow >
这里我们用这样一个函数来判断浏览器的类型初始化相应的DOM对象
function
bg_Ajax_GetXmlDoc(xml,index)
{
var xmlDoc;
if(global_IsIE&&window.Ajax_XMLDocumentProgID){
xmlDoc = new ActiveXObject(window.Ajax_XMLDocumentProgID);
if(xml!=null) xmlDoc.loadXML(xml);
return xmlDoc;
}
var xmlDocVersions = new Array("Msxml2.domdocument.5.0", "Msxml2.domdocument.4.0", "Msxml2.domdocument.3.0", "Msxml2.domdocument", "Microsoft.domdocument");
if (window.ActiveXObject && index < xmlDocVersions.length){
try{
xmlDoc = new ActiveXObject(xmlDocVersions[index]);
//Debug("XML Doc Version: "+xmlDocVersions[index]+"<br>");
xmlDoc.async="false";
xmlDoc.loadXML(xml);
window.Ajax_XMLDocumentProgID = xmlDocVersions[index];
return xmlDoc;
}catch(e){
return bg_Ajax_GetXmlDoc(xml, index+1);
}
}
if (document.implementation.createDocument){
var parser = new DOMParser();
xmlDoc = parser.parseFromString(xml, "text/xml");
return xmlDoc;
}
if(xmlDoc == null) alert("XML Doc Load Failed");
return xmlDoc;
}
通过这个函数就可以返回相应浏览器的DOM对象 xml是xml数据 index填写0即可
{
var xmlDoc;
if(global_IsIE&&window.Ajax_XMLDocumentProgID){
xmlDoc = new ActiveXObject(window.Ajax_XMLDocumentProgID);
if(xml!=null) xmlDoc.loadXML(xml);
return xmlDoc;
}
var xmlDocVersions = new Array("Msxml2.domdocument.5.0", "Msxml2.domdocument.4.0", "Msxml2.domdocument.3.0", "Msxml2.domdocument", "Microsoft.domdocument");
if (window.ActiveXObject && index < xmlDocVersions.length){
try{
xmlDoc = new ActiveXObject(xmlDocVersions[index]);
//Debug("XML Doc Version: "+xmlDocVersions[index]+"<br>");
xmlDoc.async="false";
xmlDoc.loadXML(xml);
window.Ajax_XMLDocumentProgID = xmlDocVersions[index];
return xmlDoc;
}catch(e){
return bg_Ajax_GetXmlDoc(xml, index+1);
}
}
if (document.implementation.createDocument){
var parser = new DOMParser();
xmlDoc = parser.parseFromString(xml, "text/xml");
return xmlDoc;
}
if(xmlDoc == null) alert("XML Doc Load Failed");
return xmlDoc;
}
这样我们通过var readXml=bg_Ajax_GetXmlDoc(response,0); 假设response是返回的XML数据;
readxml就是一个DOM了
然后通过下面这个函数返回节点值
function
bg_Ajax_GetNodesByTagName(node, path)
{
if(global_IsIE)
return node.selectSingleNode(path).text;
else
return node.getElementsByTagName(path)[0].textContent;
}
然后通过这样来取得一个节点的值
{
if(global_IsIE)
return node.selectSingleNode(path).text;
else
return node.getElementsByTagName(path)[0].textContent;
}
var title=bg_Ajax_GetNodesByTagName(readXml,global_IsIE ? "//blogshow/title" : "title");
下面看看该如何拿到TAG标记里的每个ITEM信息
这里我们构造这样一个函数
function
bg_Ajax_getNodes(node,path)
{
if(global_IsIE)
return node.documentElement.selectNodes(path);
else
return node.getElementsByTagName(path);
}
这里返回节点组
{
if(global_IsIE)
return node.documentElement.selectNodes(path);
else
return node.getElementsByTagName(path);
}
然后通过
var
Tag
=
bg_Ajax_getNodes(readXml,global_IsIE
?
"
//blogshow/tag/item
"
:
"
item
"
)
var j = Tag.length;
var html = "" ;
for ( var i = 0 ;i < j;i ++ )
{
line =blogshowTag[i];
html=html+"<span class=\"linktwo\" style=\"font-size:12px\"><a href=\"tu.aspx?id="+line.getAttribute("name")+"\"><nowrap>"+line.getAttribute("age")+"</nowrap></a></span> ";
}
document.getElementById( " tag " ).innerHTML = html;
var j = Tag.length;
var html = "" ;
for ( var i = 0 ;i < j;i ++ )
{
line =blogshowTag[i];
html=html+"<span class=\"linktwo\" style=\"font-size:12px\"><a href=\"tu.aspx?id="+line.getAttribute("name")+"\"><nowrap>"+line.getAttribute("age")+"</nowrap></a></span> ";
}
document.getElementById( " tag " ).innerHTML = html;
这样就返回了item的信息
在上面global_IsIE是在页面中声明的全局变量
<
script language
=
"
javascript
"
>
var global_IsIE = false ;
if (window.ActiveXObject) {
global_IsIE = true;
}
</ script >
var global_IsIE = false ;
if (window.ActiveXObject) {
global_IsIE = true;
}
</ script >
这样也就结束了,可以支持FIREFOX 在IE下更是没问题的
欢迎大家批评指正