AJAX XML 实例

AJAX 可用来与 XML 文件进行交互式通信。

AJAX XML 实例

下面的例子将演示网页如何使用 AJAX 来读取来自 XML 文件的信息:

  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4. function loadXMLDoc(url)
  5. {
  6. var xmlhttp;
  7. var txt,x,xx,i;
  8. if (window.XMLHttpRequest)
  9. {// code for IE7+, Firefox, Chrome, Opera, Safari
  10. xmlhttp=new XMLHttpRequest();
  11. }
  12. else
  13. {// code for IE6, IE5
  14. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  15. }
  16. xmlhttp.onreadystatechange=function()
  17. {
  18. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  19. {
  20. txt="<table border='1'><tr><th>Title</th><th>Artist</th></tr>";
  21. x=xmlhttp.responseXML.documentElement.getElementsByTagName("CD");
  22. for (i=0;i<x.length;i++)
  23. {
  24. txt=txt + "<tr>";
  25. xx=x[i].getElementsByTagName("TITLE");
  26. {
  27. try
  28. {
  29. txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
  30. }
  31. catch (er)
  32. {
  33. txt=txt + "<td> </td>";
  34. }
  35. }
  36. xx=x[i].getElementsByTagName("ARTIST");
  37. {
  38. try
  39. {
  40. txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
  41. }
  42. catch (er)
  43. {
  44. txt=txt + "<td> </td>";
  45. }
  46. }
  47. txt=txt + "</tr>";
  48. }
  49. txt=txt + "</table>";
  50. document.getElementById('txtCDInfo').innerHTML=txt;
  51. }
  52. }
  53. xmlhttp.open("GET",url,true);
  54. xmlhttp.send();
  55. }
  56. </script>
  57. </head>
  58. <body>
  59. <div id="txtCDInfo">
  60. <button onclick="loadXMLDoc('/example/xmle/cd_catalog.xml')">获得 CD 信息</button>
  61. </div>
  62. </body>
  63. </html>

实例解释 - loadXMLDoc() 函数

当用户点击上面的“获得 CD 信息”这个按钮,就会执行 loadXMLDoc() 函数。

loadXMLDoc() 函数创建 XMLHttpRequest 对象,添加当服务器响应就绪时执行的函数,并将请求发送到服务器。

当服务器响应就绪时,会构建一个 HTML 表格,从 XML 文件中提取节点(元素),最后使用已经填充了 XML 数据的 HTML 表格来更新 txtCDInfo 占位符:

  1. function loadXMLDoc(url)
  2. {
  3. var xmlhttp;
  4. var txt,xx,x,i;
  5. if (window.XMLHttpRequest)
  6. {// code for IE7+, Firefox, Chrome, Opera, Safari
  7. xmlhttp=new XMLHttpRequest();
  8. }
  9. else
  10. {// code for IE6, IE5
  11. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  12. }
  13. xmlhttp.onreadystatechange=function()
  14. {
  15. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  16. {
  17. txt="<table border='1'><tr><th>Title</th><th>Artist</th></tr>";
  18. x=xmlhttp.responseXML.documentElement.getElementsByTagName("CD");
  19. for (i=0;i<x.length;i++)
  20. {
  21. txt=txt + "<tr>";
  22. xx=x[i].getElementsByTagName("TITLE");
  23. {
  24. try
  25. {
  26. txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
  27. }
  28. catch (er)
  29. {
  30. txt=txt + "<td> </td>";
  31. }
  32. }
  33. xx=x[i].getElementsByTagName("ARTIST");
  34. {
  35. try
  36. {
  37. txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
  38. }
  39. catch (er)
  40. {
  41. txt=txt + "<td> </td>";
  42. }
  43. }
  44. txt=txt + "</tr>";
  45. }
  46. txt=txt + "</table>";
  47. document.getElementById('txtCDInfo').innerHTML=txt;
  48. }
  49. }
  50. xmlhttp.open("GET",url,true);
  51. xmlhttp.send();
  52. }

AJAX 服务器页面

上面这个例子中使用的服务器页面实际上是一个 XML 文件,名为 "cd_catalog.xml"。