在AJAX 中,服务器端如果返回的XML 文档,则可以通过异步对象的responseXML 属性来获取器XML 数据。而开发者可以利用DOM 的相关方法对其进行处理。
假设服务器返回的XML 文档,如下所示:
<?xml version="1.0" encoding="gb2312"?> |
<list> |
<caption>MemberList</caption> |
<member> |
<name>isaac</name> |
<class>W13</class> |
<birth>Jun24th</birth> |
<constell>Cancer</constell> |
<mobile>1118159</mobile> |
</member> |
<member> |
<name>fresheggs</name> |
<class>W610</class> |
<birth>Nov5th</birth> |
<constell>Scorpio</constell> |
<mobile>1038818</mobile> |
</member> |
客户端获得服务器端的该XML 数据,并将其显示在表格中。代码如下:
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html> |
<head> |
<title>responseXML</title> |
<style> |
<!-- |
.datalist{ |
border:1pxsolid#744011; /*表格边框*/ |
font-family:Arial; |
border-collapse:collapse; /*边框重叠*/ |
background-color:#ffd2aa; /*表格背景色*/ |
font-size:14px; |
} |
.datalistth{ |
border:1pxsolid#744011; /*行名称边框*/ |
background-color:#a16128; /*行名称背景色*/ |
color:#FFFFFF; /*行名称颜色*/ |
font-weight:bold; |
padding-top:4px;padding-bottom:4px; |
padding-left:12px;padding-right:12px; |
text-align:center; |
} |
.datalisttd{ |
border:1pxsolid#744011; /*单元格边框*/ |
text-align:left; |
padding-top:4px;padding-bottom:4px; |
padding-left:10px;padding-right:10px; |
} |
.datalisttr:hover,.datalisttr.altrow{ |
background-color:#dca06b; /*动态变色*/ |
} |
input{ /*按钮的样式*/ |
border:1pxsolid#744011; |
color:#744011; |
} |
--> |
</style> |
<script language="javascript"> |
varxmlHttp; |
functioncreateXMLHttpRequest(){ |
if(window.ActiveXObject) |
xmlHttp=newActiveXObject("Microsoft.XMLHttp"); |
elseif(window.XMLHttpRequest) |
xmlHttp=newXMLHttpRequest(); |
} |
functiongetXML(addressXML){ |
varurl=addressXML+"?timestamp="+newDate(); |
createXMLHttpRequest(); |
xmlHttp.onreadystatechange=handleStateChange; |
xmlHttp.open("GET",url); |
xmlHttp.send(null); |
} |
functionaddTableRow(sName,sClass,sBirth,sConstell,sMobile){ |
//表格添加一行的相关操作,可参看7.2.1节 |
varoTable=document.getElementById("member"); |
varoTr=oTable.insertRow(oTable.rows.length); |
varaText=newArray(); |
aText[0]=document.createTextNode(sName); |
aText[1]=document.createTextNode(sClass); |
aText[2]=document.createTextNode(sBirth); |
aText[3]=document.createTextNode(sConstell); |
aText[4]=document.createTextNode(sMobile); |
for(vari=0;i<aText.length;i++){ |
varoTd=oTr.insertCell(i); |
oTd.appendChild(aText[i]); |
} |
} |
functionDrawTable(myXML){ |
//用DOM方法操作XML文档 |
varoMembers=myXML.getElementsByTagName("member"); |
varoMember="",sName="",sClass="",sBirth="",sConstell="",sMobile=""; |
for(vari=0;i<oMembers.length;i++){ |
oMember=oMembers[i]; |
sName=oMember.getElementsByTagName("name")[0].firstChild.nodeValue; |
sClass=oMember.getElementsByTagName("class")[0].firstChild.nodeValue; |
sBirth=oMember.getElementsByTagName("birth")[0].firstChild.nodeValue; |
sConstell=oMember.getElementsByTagName("constell")[0].firstChild.nodeValue; |
sMobile=oMember.getElementsByTagName("mobile")[0].firstChild.nodeValue; |
//添加一行 |
addTableRow(sName,sMobile); |
} |
} |
functionhandleStateChange(){ |
if(xmlHttp.readyState==4&&xmlHttp.status==200) |
DrawTable(xmlHttp.responseXML); //responseXML获取到XML文档 |
} |
</script> |
</head> |
<body> |
<input type="button" value="获取XML" onclick="getXML('9-4.xml');"><br><br> |
<table class="datalist" summary="listofmembersinEEStuday" id="member"> |
<tr> |
<th scope="col">Name</th> |
<th scope="col">Class</th> |
<th scope="col">Birthday</th> |
<th scope="col">Constellation</th> |
<th scope="col">Mobile</th> |
</tr> |
</table> |
</body> |
</html> |
<input type="button" value="获取XML" onclick="getXML('9-4.xml');">
也就是说,是直接取得XML 数据的。而实际开发中返回XML 数据的工作是通过服务器端(如:ASP.NET、JSP等)的代码动态生成的。换句话说,getXML('...') 中的文件地址应该是.aspx 或.jsp等动态页面的后缀。
使用jQuery 框架实现
如果在客户端使用jQuery 框架,实现AJAX 获得服务器端的XML数据。
代码如下:
<html> |
<head> |
<title>demo</title> |
<Meta name="Author" content="xugang"/> |
<script language="javascript" src="jquery.min.js"></script> |
<scripttype="text/javascript"> |
functiongetXML(addressXML){ |
//使用jquery的ajax方法 |
$.ajax({ |
type:"GET", |
url:addressXML, |
dataType:"xml",//返回类型(区分大小写) |
success:function(myXML){ |
//each遍历每个<member>标记 |
$(myXML).find("member").each( |
function(){ |
varoMember="",sName="",sClass="",sBirth="",sConstell="",sMobile=""; |
sName=$(this).find("name").text(); |
sClass=$(this).find("class").text(); |
sBirth=$(this).find("birth").text(); |
sConstell=$(this).find("constell").text(); |
sMobile=$(this).find("mobile").text(); |
//添加行 |
$("#member").append($("<tr><td>"+sName |
+"</td><td>"+sClass |
+"</td><td>"+sBirth |
+"</td><td>"+sConstell |
+"</td><td>"+sMobile+"</td></tr>")); |
} |
) |
} |
}) |
} |
</script> |
</head> |
<body> |
<input type="button" value="获取XML" onclick="getXML('9-4.xml');"> |
<br/> |
<TABLE class="datalist" id="member"> |
<TR> |
<TH scope="col">Name</TH> |
<TH scope="col">Class</TH> |
<TH scope="col">Birthday</TH> |
<TH scope="col">Constellation</TH> |
<TH scope="col">Mobile</TH> |
</TR> |
</TABLE> |
</body> |
</html> |
服务器端传递XML 数据的方式不变。
原文链接:https://www.f2er.com/ajax/165892.html