使用XMLHttpRequest,读取XML数据

Nic*_*ahn 2 javascript xml xmlhttprequest

我正在尝试读取xml文件但不知何故我收到此错误:参数数量无效.

<script type="text/javascript"> 
//<![CDATA[ 
    if (window.XMLHttpRequest) { 
        // code for IE7+, Firefox, Chrome, Opera, Safari 
        xmlhttp = new XMLHttpRequest(); 
    } 
    else { 
        // code for IE6, IE5 
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.open("GET", "employee.XML", false); 
    xmlhttp.send(); 
    xmlDoc = xmlhttp.responseXML; 

    var empid= xmlDoc.getElementsByTagName("empid"); 
    var total = placeMarks.length; 
    var names = xmlDoc.getElementsByTagName("Name"); 
    var designation= xmlDoc.getElementsByTagName("designation"); 
    var phone= xmlDoc.getElementsByTagName("phone"); 
    ..... 
</script> 
Run Code Online (Sandbox Code Playgroud)

XML数据:

<employee>
<emp id="1007">
<name>John Chamber</name>
<designation>Web Expert1</designation>
<phone>555-55-555</phone>
<name>John D</name>
<designation>Web123123</designation>
<phone>555-55-555</phone>
<name>Chamber</name>
<designation>Web Expert</designation>
<phone>555-55-555</phone>
<name>Thomas</name>
<designation>TESTTEST</designation>
<phone>555-55-555</phone>

</emp>
</employee>
Run Code Online (Sandbox Code Playgroud)

Phi*_*lar 10

首先如下所示分出你的代码,看看服务器是否正在响应正确的200响应.

            xmlhttp.open("GET", "employee.XML", false); 
            xmlhttp.send(null);
         if (xmlhttp.status==200) {

                      xmlDoc = xmlhttp.responseXML; 
                     var empid= xmlDoc.getElementsByTagName("emp"); 
                     var total = placeMarks.length; 
                     var names = xmlDoc.getElementsByTagName("Name"); 
                     var designation= xmlDoc.getElementsByTagName("designation"); 
                     var phone= xmlDoc.getElementsByTagName("phone"); 
                     ..... ;
          }

                else if (xmlhttp.status==404) {
          alert("XML could not be found");
         }
Run Code Online (Sandbox Code Playgroud)

另外我的建议是使用像jQuery这样的javascript库来完成你的繁重任务.创建XHR对象的整个代码简化为一行

$.get(url,function(data){
                     xmlDoc = data; 
                     var empid= xmlDoc.getElementsByTagName("emp"); 
                     var total = placeMarks.length; 
                     var names = xmlDoc.getElementsByTagName("Name"); 
                     var designation= xmlDoc.getElementsByTagName("designation"); 
                     var phone= xmlDoc.getElementsByTagName("phone");
});
Run Code Online (Sandbox Code Playgroud)

最后,无论您使用哪种现代浏览器,都应该能够轻松指出脚本中的哪一行引发了错误.如果您仍然遇到问题,请确认哪一行引发了错误.

编辑 问题范围已更改.OP现在想要循环遍历xml.首先,需要设计xml以满足要求.因此它看起来应该是这样的

<employees>
 <emp id="006">
   <name>John Chamber</name>
   <designation>Web Expert1</designation>
   <phone>555-55-555</phone>
 </emp>
 <emp id="007"> 
  <name>John D</name>
  <designation>Web123123</designation>
  <phone>555-55-555</phone>
 </emp>
 <emp id="008"> 
  <name>Chamber</name>
  <designation>Web Expert</designation>
  <phone>555-55-555</phone>
 </emp>
 <emp id="009">
   <name>Thomas</name>
   <designation>TESTTEST</designation>
   <phone>555-55-555</phone>
 </emp>
</employees>
Run Code Online (Sandbox Code Playgroud)

现在用于解析xml的javascript

var emp=xmlDoc.getElementsByTagName("emp");
for (i=0;i<emp.length;i++) {
   var names=emp[i].childNodes[0].text;
   var designation= emp[i].childNodes[1].text;
   ......
}
Run Code Online (Sandbox Code Playgroud)

  • 如果需要属性`id`的值,在进行此更改后,您应该使用`xmlDoc.getElementsByTagName("emp")[0] .attributes.getNamedItem("id").nodeValue` (2认同)