Javascript函数没有正确加载xml

时间:2010-11-10 20:54:43

标签: javascript html xml

嘿伙计们,我在网上看了很多,为了试着弄清楚这个问题是什么。我是一个不是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”,如果这有助于任何人。

帮助表示赞赏!

2 个答案:

答案 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服务器上,它应该可以正常工作。