嘿伙计们,我在网上看了很多,为了试着弄清楚这个问题是什么。我是一个不是html的新手,我无法弄清楚为什么这个XML没有加载。
假设我只有两个文件“/contact.xml”和“/xmltest.html”,我想使用javascript将xml加载到html页面中。这是我到目前为止所拥有的。
<html>
<body>
<h1>Carney Contacts Test</h1>
<b>Name:</b> <span id="name"></span><br />
<b>Email:</b> <span id="email"></span><br />
<b>Phone:</b> <span id="number"></span>
<script type="text/javascript">
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET","contacts.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.getElementById("name").innerHTML=
xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
document.getElementById("email").innerHTML=
xmlDoc.getElementsByTagName("email")[0].childNodes[0].nodeValue;
document.getElementById("phone").innerHTML=
xmlDoc.getElementsByTagName("phone")[0].childNodes[0].nodeValue;
</script>
</body>
这很大程度上直接关闭了w3c网站,我仍然无法让它工作! Chrome正在给我“Uncaught TypeError:无法调用方法'getElementsByTagName'为null”,如果这有助于任何人。
帮助表示赞赏!
答案 0 :(得分:1)
你错过了网站的下一部分(我想“w3c”你的意思是w3schools.com):
if (window.DOMParser)
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(text,"text/xml");
}
else // Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(text);
}
需要将XML文本加载到DOM解析器中;在上面的代码中,xmlDoc
只是一个没有任何DOM解析能力的任意变量。
但我猜测第一个问题是您可能只是通过本地文件系统打开HTML文件 - 在这种情况下,您的XML文档永远不会被加载,因为{{1}只能通过HTTP工作;它只能从Web服务器加载东西,而不能从文件系统加载(这就是为什么responseXML为null,就像浏览器报告的那样)。
答案 1 :(得分:0)
你是如何服务contacts.xml
的?检查它是否适合XML Content-Type
,例如text/xml
。
如果您根本没有提供contacts.xml
,只是从文件系统访问它,那么这就是您的问题。某些浏览器(Chrome,具有原生XMLHttpRequest的IE)不允许文件系统上的网页从文件系统读取其他文档,因为它存在明显的安全风险。在Chrome的开发人员工具中打开JS控制台,您将看到解释性错误:
XMLHttpRequest无法加载file:///.../contacts.xml。只有HTTP支持跨源请求。
将文件放在本地Web服务器上,它应该可以正常工作。