我正在学习这些东西,所以我的代码可能不是很漂亮......但是会感激一些帮助:)
我没有编写以下代码,但是从网上的其他地方获得它:
function text_xml()
{
realXmlUrl="http://jumac.com/del_me_fruits.xml";
http_request = false;
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/xml');
}
http_request.onreadystatechange = this.response_xml;
http_request.open('GET', realXmlUrl, true);
http_request.send(null);
xmlDoc = http_request.responseXML;
}
function response_xml()
{
if (self.http_request.readyState == 4)
{
document.getElementById("ex").appendChild(document.createTextNode(" Done!"));
getFruits(http_request.responseText);
}
}
function getFruits(xml) {
var fruits = xml.getElementsByTagName("fruits")[0];
if (fruits) {
var fruitsNodes = fruits.childNodes;
if (fruitsNodes) {
for (var i = 0; i < fruitsNodes.length; i++) {
var name = fruitsNodes[i].getAttribute("name");
var colour = fruitsNodes[i].getAttribute("colour");
alert("Fruit " + name + " is coloured " + colour);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
而我得到的错误是:
Error: xml.getElementsByTagName is not a function
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
responseText是一个字符串,而不是XML.你在找responseXML?
更新
如果您的脚本是从与您正在加载的XML文档不同的域加载的(http://jumac.com/del_me_fruits.xml),那么XMLHttpRequest将在浏览器上执行不同的操作.
在IE 8上,它会弹出一个警告窗口,抱怨"该页面正在访问不受其控制的信息.这会带来安全风险.你想继续吗?" 如果单击"是",则它将正常工作(即,将加载XML并显示水果的警报).
在Chrome 12,但是,它没有弹出任何东西,它会说,"XMLHttpRequest的不能加载http://jumac.com/del_me_fruits.xml产地.HTTP://本地主机:54671不被允许访问控制允许-起源." 由于此错误,请求对象的responseXML属性将为null,您将看到错误.
关于跨域XMLHttpRequest还有其他问题,您可以在其中找到解决问题的方法,例如跨站点XMLHttpRequest和http://code.google.com/chrome/extensions/xhr.html.
<body>
<script type="text/javascript">
function text_xml() {
realXmlUrl = "http://jumac.com/del_me_fruits.xml";
http_request = false;
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
http_request.onreadystatechange = this.response_xml;
http_request.open('GET', realXmlUrl, true);
http_request.send(null);
xmlDoc = http_request.responseXML; // this doesn't have anything
}
function response_xml() {
if (self.http_request.readyState == 4) {
document.getElementById("ex").appendChild(document.createTextNode(" Done!"));
getFruits(http_request.responseXML);
}
}
function getFruits(xml) {
var fruits = xml.getElementsByTagName("fruits")[0];
if (fruits) {
var fruitsNodes = fruits.childNodes;
if (fruitsNodes) {
for (var i = 0; i < fruitsNodes.length; i++) {
var name = fruitsNodes[i].getAttribute("name");
var colour = fruitsNodes[i].getAttribute("colour");
alert("Fruit " + name + " is coloured " + colour);
}
}
}
}
</script>
<input type="button" value="Click me" onclick="text_xml();" />
<p><div id="ex"></div></p>
</body>
Run Code Online (Sandbox Code Playgroud)