当前位置:Gxlcms > AJAX > AJAX对服务器返回XML的处理方法

AJAX对服务器返回XML的处理方法

时间:2021-07-01 10:21:17 帮助过:43人阅读

本文实例讲述了AJAX对服务器返回XML的处理方法。分享给大家供大家参考。具体分析如下:

在AJAX 中,服务器端如果返回的XML 文档,则可以通过异步对象的responseXML 属性来获取器XML 数据。而开发者可以利用DOM 的相关方法对其进行处理。

假设服务器返回的XML 文档,如下所示:

  1. <?xml version="1.0" encoding="gb2312"?>
  2. <list>
  3. <caption>Member List</caption>
  4. <member>
  5. <name>isaac</name>
  6. <class>W13</class>
  7. <birth>Jun 24th</birth>
  8. <constell>Cancer</constell>
  9. <mobile>1118159</mobile>
  10. </member>
  11. <member>
  12. <name>fresheggs</name>
  13. <class>W610</class>
  14. <birth>Nov 5th</birth>
  15. <constell>Scorpio</constell>
  16. <mobile>1038818</mobile>
  17. </member>
  18. <member>
  19. <name>girlwing</name>
  20. <class>W210</class>
  21. <birth>Sep 16th</birth>
  22. <constell>Virgo</constell>
  23. <mobile>1307994</mobile>
  24. </member>
  25. <member>
  26. <name>tastestory</name>
  27. <class>W15</class>
  28. <birth>Nov 29th</birth>
  29. <constell>Sagittarius</constell>
  30. <mobile>1095245</mobile>
  31. </member>
  32. <member>
  33. <name>lovehate</name>
  34. <class>W47</class>
  35. <birth>Sep 5th</birth>
  36. <constell>Virgo</constell>
  37. <mobile>6098017</mobile>
  38. </member>
  39. <member>
  40. <name>slepox</name>
  41. <class>W19</class>
  42. <birth>Nov 18th</birth>
  43. <constell>Scorpio</constell>
  44. <mobile>0658635</mobile>
  45. </member>
  46. <member>
  47. <name>smartlau</name>
  48. <class>W19</class>
  49. <birth>Dec 30th</birth>
  50. <constell>Capricorn</constell>
  51. <mobile>0006621</mobile>
  52. </member>
  53. <member>
  54. <name>tuonene</name>
  55. <class>W210</class>
  56. <birth>Nov 26th</birth>
  57. <constell>Sagittarius</constell>
  58. <mobile>0091704</mobile>
  59. </member>
  60. <member>
  61. <name>dovecho</name>
  62. <class>W19</class>
  63. <birth>Dec 9th</birth>
  64. <constell>Sagittarius</constell>
  65. <mobile>1892013</mobile>
  66. </member>
  67. <member>
  68. <name>shanghen</name>
  69. <class>W42</class>
  70. <birth>May 24th</birth>
  71. <constell>Gemini</constell>
  72. <mobile>1544254</mobile>
  73. </member>
  74. <member>
  75. <name>venessawj</name>
  76. <class>W45</class>
  77. <birth>Apr 1st</birth>
  78. <constell>Aries</constell>
  79. <mobile>1523753</mobile>
  80. </member>
  81. <member>
  82. <name>lightyear</name>
  83. <class>W311</class>
  84. <birth>Mar 23th</birth>
  85. <constell>Aries</constell>
  86. <mobile>1002908</mobile>
  87. </member>
  88. </list>

客户端获得服务器端的该XML 数据,并将其显示在表格中。代码如下:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html>
  3. <head>
  4. <title>responseXML</title>
  5. <style>
  6. <!--
  7. .datalist{
  8. border:1px solid #744011; /* 表格边框 */
  9. font-family:Arial;
  10. border-collapse:collapse; /* 边框重叠 */
  11. background-color:#ffd2aa; /* 表格背景色 */
  12. font-size:14px;
  13. }
  14. .datalist th{
  15. border:1px solid #744011; /* 行名称边框 */
  16. background-color:#a16128; /* 行名称背景色 */
  17. color:#FFFFFF; /* 行名称颜色 */
  18. font-weight:bold;
  19. padding-top:4px; padding-bottom:4px;
  20. padding-left:12px; padding-right:12px;
  21. text-align:center;
  22. }
  23. .datalist td{
  24. border:1px solid #744011; /* 单元格边框 */
  25. text-align:left;
  26. padding-top:4px; padding-bottom:4px;
  27. padding-left:10px; padding-right:10px;
  28. }
  29. .datalist tr:hover, .datalist tr.altrow{
  30. background-color:#dca06b; /* 动态变色 */
  31. }
  32. input{ /* 按钮的样式 */
  33. border:1px solid #744011;
  34. color:#744011;
  35. }
  36. -->
  37. </style>
  38. <script language="javascript">
  39. var xmlHttp;
  40. function createXMLHttpRequest(){
  41. if(window.ActiveXObject)
  42. xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
  43. else if(window.XMLHttpRequest)
  44. xmlHttp = new XMLHttpRequest();
  45. }
  46. function getXML(addressXML){
  47. var url = addressXML + "?timestamp=" + new Date();
  48. createXMLHttpRequest();
  49. xmlHttp.onreadystatechange = handleStateChange;
  50. xmlHttp.open("GET",url);
  51. xmlHttp.send(null);
  52. }
  53. function addTableRow(sName, sClass, sBirth, sConstell, sMobile){
  54. //表格添加一行的相关操作,可参看7.2.1节
  55. var oTable = document.getElementById("member");
  56. var oTr = oTable.insertRow(oTable.rows.length);
  57. var aText = new Array();
  58. aText[0] = document.createTextNode(sName);
  59. aText[1] = document.createTextNode(sClass);
  60. aText[2] = document.createTextNode(sBirth);
  61. aText[3] = document.createTextNode(sConstell);
  62. aText[4] = document.createTextNode(sMobile);
  63. for(var i=0;i<aText.length;i++){
  64. var oTd = oTr.insertCell(i);
  65. oTd.appendChild(aText[i]);
  66. }
  67. }
  68. function DrawTable(myXML){
  69. //用DOM方法操作XML文档
  70. var oMembers = myXML.getElementsByTagName("member");
  71. var oMember = "", sName = "", sClass = "", sBirth = "", sConstell = "", sMobile = "";
  72. for(var i=0;i<oMembers.length;i++){
  73. oMember = oMembers[i];
  74. sName = oMember.getElementsByTagName("name")[0].firstChild.nodeValue;
  75. sClass = oMember.getElementsByTagName("class")[0].firstChild.nodeValue;
  76. sBirth = oMember.getElementsByTagName("birth")[0].firstChild.nodeValue;
  77. sConstell = oMember.getElementsByTagName("constell")[0].firstChild.nodeValue;
  78. sMobile = oMember.getElementsByTagName("mobile")[0].firstChild.nodeValue;
  79. //添加一行
  80. addTableRow(sName, sClass, sBirth, sConstell, sMobile);
  81. }
  82. }
  83. function handleStateChange(){
  84. if(xmlHttp.readyState == 4 && xmlHttp.status == 200)
  85. DrawTable(xmlHttp.responseXML);//responseXML获取到XML文档
  86. }
  87. </script>
  88. </head>
  89. <body>
  90. <input type="button" value="获取XML" onclick="getXML('9-4.xml');"><br><br>
  91. <table class="datalist" summary="list of members in EE Studay" id="member">
  92. <tr>
  93. <th scope="col">Name</th>
  94. <th scope="col">Class</th>
  95. <th scope="col">Birthday</th>
  96. <th scope="col">Constellation</th>
  97. <th scope="col">Mobile</th>
  98. </tr>
  99. </table>
  100. </body>
  101. </html>

我们可以看到,在客户端获得XML 文件的代码如下:

  1. <input type="button" value="获取XML" onclick="getXML('9-4.xml');">

也就是说,是直接取得XML 数据的。而实际开发中返回XML 数据的工作是通过服务器端(如:ASP.NET、JSP等)的代码动态生成的。换句话说,getXML('...') 中的文件地址应该是.aspx 或.jsp等动态页面的后缀。

使用jQuery 框架实现

如果在客户端使用jQuery 框架,实现AJAX 获得服务器端的XML数据。

代码如下:

  1. <html>
  2. <head>
  3. <title> demo </title>
  4. <meta name="Author" content="xugang" />
  5. <script language="javascript" src="jquery.min.js"></script>
  6. <script type="text/javascript">
  7. function getXML(addressXML){
  8. //使用jquery的ajax方法
  9. $.ajax({
  10. type:"GET",
  11. url:addressXML,
  12. dataType:"xml", //返回类型(区分大小写)
  13. success:function(myXML){
  14. //each 遍历每个<member>标记
  15. $(myXML).find("member").each(
  16. function(){
  17. var oMember="",sName="",sClass="",sBirth="",sConstell="",sMobile="";
  18. sName = $(this).find("name").text();
  19. sClass = $(this).find("class").text();
  20. sBirth = $(this).find("birth").text();
  21. sConstell = $(this).find("constell").text();
  22. sMobile = $(this).find("mobile").text();
  23. //添加行
  24. $("#member").append($("<tr><td>"+sName
  25. +"</td><td>" + sClass
  26. +"</td><td>" + sBirth
  27. +"</td><td>" + sConstell
  28. +"</td><td>" + sMobile +"</td></tr>"));
  29. }
  30. )
  31. }
  32. })
  33. }
  34. </script>
  35. </head>
  36. <body>
  37. <input type="button" value="获取XML" onclick="getXML('9-4.xml');">
  38. <br/>
  39. <TABLE class="datalist" id="member">
  40. <TR>
  41. <TH scope="col">Name</TH>
  42. <TH scope="col">Class</TH>
  43. <TH scope="col">Birthday</TH>
  44. <TH scope="col">Constellation</TH>
  45. <TH scope="col">Mobile</TH>
  46. </TR>
  47. </TABLE>
  48. </body>
  49. </html>

服务器端传递XML 数据的方式不变。

希望本文所述对大家的Ajax程序设计有所帮助。

人气教程排行