AJAX XML 应用程序

本章演示使用 XML、HTTP、DOM 以及 JavaScript 的 HTML 应用程序。

使用的 XML 文档

在本章中,我们将使用名为 "music_list.xml" 的 XML 文件。

  1. This XML file does not appear to have any style information associated with it. The document tree is shown below.
  2. <CATALOG>
  3. <TRACK>
  4. <TITLE>再见</TITLE>
  5. <ARTIST>邓紫棋</ARTIST>
  6. <ALBUM>新的心跳</ALBUM>
  7. <COUNTRY>中国</COUNTRY>
  8. <COMPANY>邓紫棋工作室</COMPANY>
  9. <YEAR>2016</YEAR>
  10. </TRACK>
  11. <TRACK>
  12. <TITLE>All I Ask</TITLE>
  13. <ARTIST>Adele</ARTIST>
  14. <ALBUM>25</ALBUM>
  15. <COUNTRY>英国</COUNTRY>
  16. <COMPANY>XL Recordings</COMPANY>
  17. <YEAR>2015</YEAR>
  18. </TRACK>
  19. <TRACK>
  20. <TITLE>之乎者也</TITLE>
  21. <ARTIST>罗大佑</ARTIST>
  22. <ALBUM>青春舞曲</ALBUM>
  23. <COUNTRY>中国</COUNTRY>
  24. <COMPANY>滚石唱片</COMPANY>
  25. <YEAR>1982</YEAR>
  26. </TRACK>
  27. <TRACK>
  28. <TITLE>Never Be Alone</TITLE>
  29. <ARTIST>Shawn Mendes</ARTIST>
  30. <ALBUM>Handwritten</ALBUM>
  31. <COUNTRY>加拿大</COUNTRY>
  32. <COMPANY>环球唱片</COMPANY>
  33. <YEAR>2015</YEAR>
  34. </TRACK>
  35. <TRACK>
  36. <TITLE>慢慢</TITLE>
  37. <ARTIST>张学友</ARTIST>
  38. <ALBUM>忘记你我做不到</ALBUM>
  39. <COUNTRY>中国</COUNTRY>
  40. <COMPANY>环球唱片</COMPANY>
  41. <YEAR>1996</YEAR>
  42. </TRACK>
  43. <TRACK>
  44. <TITLE>Complicated</TITLE>
  45. <ARTIST>Avril Lavigne</ARTIST>
  46. <ALBUM>Let Go</ALBUM>
  47. <COUNTRY>加拿大</COUNTRY>
  48. <COMPANY>索尼音乐</COMPANY>
  49. <YEAR>2002</YEAR>
  50. </TRACK>
  51. <TRACK>
  52. <TITLE>三生三世</TITLE>
  53. <ARTIST>张杰</ARTIST>
  54. <ALBUM>三生三世十里桃花</ALBUM>
  55. <COUNTRY>中国</COUNTRY>
  56. <COMPANY>仁溪音乐</COMPANY>
  57. <YEAR>2018</YEAR>
  58. </TRACK>
  59. <TRACK>
  60. <TITLE>Five Hundred Miles</TITLE>
  61. <ARTIST>Justin Timberlake</ARTIST>
  62. <ALBUM>Inside Llewyn Davis</ALBUM>
  63. <COUNTRY>美国</COUNTRY>
  64. <COMPANY>华纳唱片</COMPANY>
  65. <YEAR>2013</YEAR>
  66. </TRACK>
  67. <TRACK>
  68. <TITLE>演员</TITLE>
  69. <ARTIST>薛之谦</ARTIST>
  70. <ALBUM>绅士</ALBUM>
  71. <COUNTRY>中国</COUNTRY>
  72. <COMPANY>海蝶音乐</COMPANY>
  73. <YEAR>2016</YEAR>
  74. </TRACK>
  75. <TRACK>
  76. <TITLE>Numb</TITLE>
  77. <ARTIST>Linkin Park</ARTIST>
  78. <ALBUM>Meteora</ALBUM>
  79. <COUNTRY>美国</COUNTRY>
  80. <COMPANY>华纳唱片</COMPANY>
  81. <YEAR>2003</YEAR>
  82. </TRACK>
  83. <TRACK>
  84. <TITLE>给未来的自己</TITLE>
  85. <ARTIST>梁静茹</ARTIST>
  86. <ALBUM>崇拜</ALBUM>
  87. <COUNTRY>马来西亚</COUNTRY>
  88. <COMPANY>相信音乐</COMPANY>
  89. <YEAR>2007</YEAR>
  90. </TRACK>
  91. <TRACK>
  92. <TITLE>The Monster</TITLE>
  93. <ARTIST>Rihanna</ARTIST>
  94. <ALBUM>The Marshall Mathers LP2</ALBUM>
  95. <COUNTRY>巴巴多斯</COUNTRY>
  96. <COMPANY>环球唱片</COMPANY>
  97. <YEAR>2013</YEAR>
  98. </TRACK>
  99. <TRACK>
  100. <TITLE>我终于失去了你</TITLE>
  101. <ARTIST>赵传</ARTIST>
  102. <ALBUM>我终于失去了你</ALBUM>
  103. <COUNTRY>中国</COUNTRY>
  104. <COMPANY>滚石唱片</COMPANY>
  105. <YEAR>1989</YEAR>
  106. </TRACK>
  107. <TRACK>
  108. <TITLE>Main Titles</TITLE>
  109. <ARTIST>Ramin Djawadi</ARTIST>
  110. <ALBUM>Game of Thrones</ALBUM>
  111. <COUNTRY>德国</COUNTRY>
  112. <COMPANY>索尼音乐</COMPANY>
  113. <YEAR>2011</YEAR>
  114. </TRACK>
  115. <TRACK>
  116. <TITLE>传奇</TITLE>
  117. <ARTIST>李健</ARTIST>
  118. <ALBUM>似水流年</ALBUM>
  119. <COUNTRY>中国</COUNTRY>
  120. <COMPANY>北京完美坚持文化艺术工作室</COMPANY>
  121. <YEAR>2003</YEAR>
  122. </TRACK>
  123. <TRACK>
  124. <TITLE>完美生活</TITLE>
  125. <ARTIST>许巍</ARTIST>
  126. <ALBUM>时光漫步</ALBUM>
  127. <COUNTRY>中国</COUNTRY>
  128. <COMPANY>金牌大风</COMPANY>
  129. <YEAR>2002</YEAR>
  130. </TRACK>
  131. </CATALOG>

在 HTML 表格中显示 XML 数据

本例遍历每个 <TRACK> 元素,然后在 HTML 表格中显示 <ARTIST> 和 <TITLE> 元素的值:

实例

  1. <html>
  2. <body>
  3.  
  4. <table id="demo"></table>
  5.  
  6. <script>
  7. function loadXMLDoc() {
  8. var xmlhttp = new XMLHttpRequest();
  9. xmlhttp.onreadystatechange = function() {
  10. if (this.readyState == 4 && this.status == 200) {
  11. myFunction(this);
  12. }
  13. };
  14. xmlhttp.open("GET", "music_list.xml", true);
  15. xmlhttp.send();
  16. }
  17. function myFunction(xml) {
  18. var i;
  19. var xmlDoc = xml.responseXML;
  20. var table="<tr><th>艺术家</th><th>曲目</th></tr>";
  21. var x = xmlDoc.getElementsByTagName("TRACK");
  22. for (i = 0; i <x.length; i++) {
  23. table += "<tr><td>" +
  24. x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue +
  25. "</td><td>" +
  26. x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue +
  27. "</td></tr>";
  28. }
  29. document.getElementById("demo").innerHTML = table;
  30. }
  31. </script>
  32.  
  33. </body>
  34. </html>

如需更多有关使用 JavaScript 和 XML DOM 的信息,请访问 DOM 简介

在 HTML div 元素中显示第一首曲子

本例使用一个函数在 id="displayMUSIC" 的 HTML 元素中显示第一首歌曲:

实例

  1. displayMUSIC(0);
  2.  
  3. function displayMUSIC(i) {
  4. var xmlhttp = new XMLHttpRequest();
  5. xmlhttp.onreadystatechange = function() {
  6. if (this.readyState == 4 && this.status == 200) {
  7. myFunction(this, i);
  8. }
  9. };
  10. xmlhttp.open("GET", "music_list.xml", true);
  11. xmlhttp.send();
  12. }
  13.  
  14. function myFunction(xml, i) {
  15. var xmlDoc = xml.responseXML;
  16. x = xmlDoc.getElementsByTagName("TRACK");
  17. document.getElementById("showMUSIC").innerHTML =
  18. "<ul>" +
  19. "<li>曲目:" +
  20. x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue + "</li>" +
  21. "<li>艺术家:" +
  22. x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue + "</li>" +
  23. "<li>专辑:" +
  24. x[i].getElementsByTagName("ALBUM")[0].childNodes[0].nodeValue + "</li>" +
  25. "<li>国家:" +
  26. x[i].getElementsByTagName("COUNTRY")[0].childNodes[0].nodeValue + "</li>" +
  27. "<li>公司:" +
  28. x[i].getElementsByTagName("COMPANY")[0].childNodes[0].nodeValue + "</li>" +
  29. "<li>年份:" +
  30. x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue + "</li>" +
  31. "</ul>";
  32. }

在曲目之间导航

如需在上例中的曲目间导航,请添加 next() 和 previous() 函数:

实例

  1. function next() {
  2. // 显示下一首歌曲,除非已到达最后一首
  3. if (i < x.length-1) {
  4. i++;
  5. displayMUSIC(i);
  6. }
  7. }
  8.  
  9. function previous() {
  10. // 显示上一首歌曲,除非已到达第一首
  11. if (i > 0) {
  12. i--;
  13. displayMUSIC(i);
  14. }
  15. }

在点击歌曲时显示专辑信息

最后这个例子演示当用户点击某一首歌曲时如何显示专辑信息:

实例

  1. function displayMUSIC(i) {
  2. document.getElementById("showMUSIC").innerHTML =
  3. "<ul>" +
  4. "<li>曲目:" +
  5. x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue + "</li>" +
  6. "<li>艺术家:" +
  7. x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue + "</li>" +
  8. "<li>专辑:" +
  9. x[i].getElementsByTagName("ALBUM")[0].childNodes[0].nodeValue + "</li>" +
  10. "<li>国家:" +
  11. x[i].getElementsByTagName("COUNTRY")[0].childNodes[0].nodeValue + "</li>" +
  12. "<li>公司:" +
  13. x[i].getElementsByTagName("COMPANY")[0].childNodes[0].nodeValue + "</li>" +
  14. "<li>年份:" +
  15. x[i].getElementsByTagName("YEAR")[0].childNodes[0].nodeValue + "</li>" +
  16. "</ul>";
  17. }