AJAX對服務器返回XML的處理方法
本文實例講述了AJAX對服務器返回XML的處理方法。分享給大家供大家參考。具體分析如下:
在AJAX 中,服務器端如果返回的XML 文檔,則可以通過異步對象的responseXML 屬性來獲取器XML 數據。而開發(fā)者可以利用DOM 的相關方法對其進行處理。
假設服務器返回的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 數據,并將其顯示在表格中。代碼如下:
<!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){
//表格添加一行的相關操作,可參看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;i<aText.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;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);
}
}
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 數據的。而實際開發(fā)中返回XML 數據的工作是通過服務器端(如:ASP.NET、JSP等)的代碼動態(tài)生成的。換句話說,getXML('...') 中的文件地址應該是.aspx 或.jsp等動態(tài)頁面的后綴。
使用jQuery 框架實現
如果在客戶端使用jQuery 框架,實現AJAX 獲得服務器端的XML數據。
代碼如下:
<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 數據的方式不變。
希望本文所述對大家的Ajax程序設計有所幫助。
相關文章
利用AjaxSubmit()方法實現Form提交表單后回調功能
ajaxSubmit()方法是JQuery Form表單插件中的方法,使用時,需要在jsp或者html頁面上,引入JQuery庫和Form插件。接下來通過本文給大家分享通過AjaxSubmit()方法實現Form提交表單后回調功能,感興趣的朋友跟隨腳本之家小編一起看看吧2018-05-05

