利用getElementsByTagName解析 responseXML 返回的值


利用getElementsByTagName解析 responseXML 返回的值

分类: Ajax 1705人阅读 评论(2) 收藏 举报
以下程序在IE6和Firefox/3.1b1 下测试通过

在Ajax返回的responseXML中,需要对其进行解析,而IE6和Firefox是有点小区别的
以下附上完整代码再解释。
XML文件:
  1. <?xml version="1.0"?>
  2. <options>
  3.     <option>Red</option>
  4.     <option>Green</option>
  5.     <option>Blue</option>
  6. </options>
HTML:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">

  3. <head>
  4. <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
  5. <title>无标题 1</title>
  6. <script type="text/javascript">
  7. var options = false;

  8. //创建XMLHttpRequest对象
  9. function CreateRequest()
  10. {
  11.     if (window.XMLHttpRequest)
  12.         return new XMLHttpRequest();
  13.     else if (window.ActiveXObject)
  14.         return new ActiveXObject("Microsoft.XMLHTTP");
  15.     else
  16.         return false;
  17. }
  18. function GetDataFromXML(filename)
  19. {
  20.     var request = CreateRequest();
  21.     if (!request)
  22.         return;
  23.         
  24.     var result = document.getElementById("result");
  25.     var txts = document.getElementById("txts");
  26.     
  27.     request.open("GET", filename);
  28.     request.onreadystatechange = function()
  29.     {
  30.         if (request.readyState==4)
  31.         {
  32.             //由于是本地测试,有时会出现 request.status=0 的情况
  33.             if (request.status==200)
  34.             {
  35.                 var xmlDoc;
  36.                 //IE6
  37.                 if (window.ActiveXObject)
  38.                 {
  39.                     xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  40.                     xmlDoc.async = false;
  41.                     xmlDoc.load(request.responseXML);//不可以是 responseText
  42.                 }
  43.                 //Firefox
  44.                 else
  45.                 {
  46.                     xmlDoc = request.responseXML;
  47.                 }
  48.                     options = xmlDoc.getElementsByTagName("option");
  49.                 txts.value = options.length;
  50.                 ListOptions();
  51.             }
  52.         }
  53.     }
  54.     request.send(null);
  55. }
  56. //为select添加选项
  57. function ListOptions()
  58. {
  59.     var select = document.getElementById("select");
  60.     
  61.     for (var i=0; i<options.length; i++)
  62.     {
  63.         select.options[i+1] = new Option(options[i].firstChild.data, options[i].firstChild.data);
  64.     }
  65. }
  66. function SelectChange()
  67. {
  68.     var txts = document.getElementById("show");
  69.     var select = document.getElementById("select");
  70.     txts.style.color = select.value;
  71. }
  72. </script>

  73. </head>

  74. <body>
  75.     <div>
  76.         <input type="button" id="btn" onclick="GetDataFromXML('test.xml');" value="Submit" />
  77.     </div>
  78.     
  79.     <div id="result">
  80.     
  81.         <select id="select" onchange="SelectChange();">
  82.             <option>==请选择颜色==</option>
  83.         </select>
  84.     
  85.     </div>
  86.     
  87.     <div>
  88.         <textarea cols="10" rows="10" id="txts" style="width:500px; height:300px;" ></textarea>
  89.     </div>
  90.     <div id="show">
  91.         this is show...
  92.     </div>

  93. </body>

  94. </html>


区别体现在HTML代码中40-51行,IE6中是要创建对象 ActiveXObject("Microsoft.XMLDOM") 对 responseXML对象进行加载后方可用 getElementsByTagName进行解析的。
不知道这点区别而一直在IE6下测试会一头雾水,没报错但也没结果。

为了简单,本程序在 创建XMLHttpRequest对象时只考虑了IE6及以上版本和FF,而如果要考虑老版本的IE,则需要更复杂的创建过程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值