Javascript 使用 XMLHttpRequest,读取 XML 数据
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4316266/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using XMLHttpRequest, reading XML data
提问by Nick Kahn
i am trying to read the xml file but somehow i am getting this error: Invalid number of parameters.
我正在尝试读取 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>
XML data:
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>
回答by Philar
Firstly branch out your code as shown below to see if the server is responding with the correct 200
response.
首先将您的代码分出如下所示,以查看服务器是否以正确的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");
}
Also my suggestion is to use a javascript library like jQuery which does much of the heavy lifting for your. The whole code for creating the XHR object simply reduces to one line
另外我的建议是使用像 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");
});
Finally whichever modern browser that you are using should easily be able to point out which line in the script is throwing the error. If you still face the issue please confirm which line is throwing the error.
最后,您使用的任何现代浏览器都应该能够轻松指出脚本中的哪一行引发了错误。如果您仍然遇到问题,请确认哪一行引发了错误。
EDITThe problem scope has changed. The OP now wants to loop through the xml. First of all the xml needs to be designed keeping the requirements in mind. Hence it should look like this
编辑问题范围已更改。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>
Now the javascript for parsing the xml
现在用于解析 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;
......
}
回答by Free Consulting
Use xmlhttp.send(null);
http://www.w3.org/TR/XMLHttpRequest/#the-send-method
使用xmlhttp.send(null);
http://www.w3.org/TR/XMLHttpRequest/#the-send-method