本文實例講述了AJAX對服務器返回XML的處理方法。分享給大家供大家參考。具體分析如下:
在AJAX 中,服務器端如果返回的XML 文檔,則可以通過異步對象的responseXML 屬性來獲取器XML 數(shù)據(jù)。而開發(fā)者可以利用DOM 的相關(guān)方法對其進行處理。
假設服務器返回的XML 文檔,如下所示:
?xml version="1.0" encoding="gb2312"?> list> caption>Member List/caption> member> name>isaac/name> class>W13/class> birth>Jun 24th/birth> constell>Cancer/constell> mobile>1118159/mobile> /member> member> name>fresheggs/name> class>W610/class> birth>Nov 5th/birth> constell>Scorpio/constell> mobile>1038818/mobile> /member> member> name>girlwing/name> class>W210/class> birth>Sep 16th/birth> constell>Virgo/constell> mobile>1307994/mobile> /member> member> name>tastestory/name> class>W15/class> birth>Nov 29th/birth> constell>Sagittarius/constell> mobile>1095245/mobile> /member> member> name>lovehate/name> class>W47/class> birth>Sep 5th/birth> constell>Virgo/constell> mobile>6098017/mobile> /member> member> name>slepox/name> class>W19/class> birth>Nov 18th/birth> constell>Scorpio/constell> mobile>0658635/mobile> /member> member> name>smartlau/name> class>W19/class> birth>Dec 30th/birth> constell>Capricorn/constell> mobile>0006621/mobile> /member> member> name>tuonene/name> class>W210/class> birth>Nov 26th/birth> constell>Sagittarius/constell> mobile>0091704/mobile> /member> member> name>dovecho/name> class>W19/class> birth>Dec 9th/birth> constell>Sagittarius/constell> mobile>1892013/mobile> /member> member> name>shanghen/name> class>W42/class> birth>May 24th/birth> constell>Gemini/constell> mobile>1544254/mobile> /member> member> name>venessawj/name> class>W45/class> birth>Apr 1st/birth> constell>Aries/constell> mobile>1523753/mobile> /member> member> name>lightyear/name> class>W311/class> birth>Mar 23th/birth> constell>Aries/constell> mobile>1002908/mobile> /member> /list>
客戶端獲得服務器端的該XML 數(shù)據(jù),并將其顯示在表格中。代碼如下:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> html> head> title>responseXML/title> style> !-- .datalist{ border:1px solid #744011; /* 表格邊框 */ font-family:Arial; border-collapse:collapse; /* 邊框重疊 */ background-color:#ffd2aa; /* 表格背景色 */ font-size:14px; } .datalist th{ border:1px solid #744011; /* 行名稱邊框 */ background-color:#a16128; /* 行名稱背景色 */ color:#FFFFFF; /* 行名稱顏色 */ font-weight:bold; padding-top:4px; padding-bottom:4px; padding-left:12px; padding-right:12px; text-align:center; } .datalist td{ border:1px solid #744011; /* 單元格邊框 */ text-align:left; padding-top:4px; padding-bottom:4px; padding-left:10px; padding-right:10px; } .datalist tr:hover, .datalist tr.altrow{ background-color:#dca06b; /* 動態(tài)變色 */ } input{ /* 按鈕的樣式 */ border:1px solid #744011; color:#744011; } --> /style> script language="javascript"> var xmlHttp; function createXMLHttpRequest(){ if(window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHttp"); else if(window.XMLHttpRequest) xmlHttp = new XMLHttpRequest(); } function getXML(addressXML){ var url = addressXML + "?timestamp=" + new Date(); createXMLHttpRequest(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("GET",url); xmlHttp.send(null); } function addTableRow(sName, sClass, sBirth, sConstell, sMobile){ //表格添加一行的相關(guān)操作,可參看7.2.1節(jié) var oTable = document.getElementById("member"); var oTr = oTable.insertRow(oTable.rows.length); var aText = new Array(); 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(var i=0;iaText.length;i++){ var oTd = oTr.insertCell(i); oTd.appendChild(aText[i]); } } function DrawTable(myXML){ //用DOM方法操作XML文檔 var oMembers = myXML.getElementsByTagName("member"); var oMember = "", sName = "", sClass = "", sBirth = "", sConstell = "", sMobile = ""; for(var i=0;ioMembers.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); } } function handleStateChange(){ 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="list of members in EE Studay" 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 數(shù)據(jù)的。而實際開發(fā)中返回XML 數(shù)據(jù)的工作是通過服務器端(如:ASP.NET、JSP等)的代碼動態(tài)生成的。換句話說,getXML('...') 中的文件地址應該是.aspx 或.jsp等動態(tài)頁面的后綴。
使用jQuery 框架實現(xiàn)
如果在客戶端使用jQuery 框架,實現(xiàn)AJAX 獲得服務器端的XML數(shù)據(jù)。
代碼如下:
html> head> title> demo /title> meta name="Author" content="xugang" /> script language="javascript" src="jquery.min.js">/script> script type="text/javascript"> function getXML(addressXML){ //使用jquery的ajax方法 $.ajax({ type:"GET", url:addressXML, dataType:"xml", //返回類型(區(qū)分大小寫) success:function(myXML){ //each 遍歷每個member>標記 $(myXML).find("member").each( function(){ var oMember="",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 數(shù)據(jù)的方式不變。
希望本文所述對大家的Ajax程序設計有所幫助。