AJAX对服务器返回XML的处理方法
本文实例讲述了AJAX对服务器返回XML的处理方法。分享给大家供大家参考。具体分析如下:
在AJAX中,服务器端如果返回的XML文档,则可以通过异步对象的responseXML属性来获取器XML数据。而开发者可以利用DOM的相关方法对其进行处理。
假设服务器返回的XML文档,如下所示:
<?xmlversion="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> <member> <name>girlwing</name> <class>W210</class> <birth>Sep16th</birth> <constell>Virgo</constell> <mobile>1307994</mobile> </member> <member> <name>tastestory</name> <class>W15</class> <birth>Nov29th</birth> <constell>Sagittarius</constell> <mobile>1095245</mobile> </member> <member> <name>lovehate</name> <class>W47</class> <birth>Sep5th</birth> <constell>Virgo</constell> <mobile>6098017</mobile> </member> <member> <name>slepox</name> <class>W19</class> <birth>Nov18th</birth> <constell>Scorpio</constell> <mobile>0658635</mobile> </member> <member> <name>smartlau</name> <class>W19</class> <birth>Dec30th</birth> <constell>Capricorn</constell> <mobile>0006621</mobile> </member> <member> <name>tuonene</name> <class>W210</class> <birth>Nov26th</birth> <constell>Sagittarius</constell> <mobile>0091704</mobile> </member> <member> <name>dovecho</name> <class>W19</class> <birth>Dec9th</birth> <constell>Sagittarius</constell> <mobile>1892013</mobile> </member> <member> <name>shanghen</name> <class>W42</class> <birth>May24th</birth> <constell>Gemini</constell> <mobile>1544254</mobile> </member> <member> <name>venessawj</name> <class>W45</class> <birth>Apr1st</birth> <constell>Aries</constell> <mobile>1523753</mobile> </member> <member> <name>lightyear</name> <class>W311</class> <birth>Mar23th</birth> <constell>Aries</constell> <mobile>1002908</mobile> </member> </list>
客户端获得服务器端的该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> <scriptlanguage="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,sClass,sBirth,sConstell,sMobile); } } functionhandleStateChange(){ if(xmlHttp.readyState==4&&xmlHttp.status==200) DrawTable(xmlHttp.responseXML);//responseXML获取到XML文档 } </script> </head> <body> <inputtype="button"value="获取XML"onclick="getXML('9-4.xml');"><br><br> <tableclass="datalist"summary="listofmembersinEEStuday"id="member"> <tr> <thscope="col">Name</th> <thscope="col">Class</th> <thscope="col">Birthday</th> <thscope="col">Constellation</th> <thscope="col">Mobile</th> </tr> </table> </body> </html>
我们可以看到,在客户端获得XML文件的代码如下:
<inputtype="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> <metaname="Author"content="xugang"/> <scriptlanguage="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> <inputtype="button"value="获取XML"onclick="getXML('9-4.xml');"> <br/> <TABLEclass="datalist"id="member"> <TR> <THscope="col">Name</TH> <THscope="col">Class</TH> <THscope="col">Birthday</TH> <THscope="col">Constellation</TH> <THscope="col">Mobile</TH> </TR> </TABLE> </body> </html>
服务器端传递XML数据的方式不变。
希望本文所述对大家的Ajax程序设计有所帮助。