在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> |
我们可以看到,在客户端获得XML 文件的代码如下:
<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 数据的方式不变。