XMLHttpRequest无法加载http://localhost:8081/sample.xml。由于Access-Control-Allow-Origin,来源null不被允许。

4
<!DOCTYPE html>
<html>
<head>
<script>
function loadXMLDoc(url)
{
var xmlhttp;
var txt,x,xx,i;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
txt="<table border='1'><tr><th>Author</th><th>Title</th></tr>";
x=xmlhttp.responseXML.documentElement.getElementsByTagName("book");
for (i=0;i<x.length;i++)
  {
  txt=txt + "<tr>";     
  xx=x[i].getElementsByTagName("author");
    {
    try
      {
      txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
      }
    catch (er)
      {
      txt=txt + "<td> </td>";
      }
    }
    xx=x[i].getElementsByTagName("title");
    {
    try
      {
      txt=txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
      }
    catch (er)
      {
      txt=txt + "<td> </td>";
      }
    }
  txt=txt + "</tr>";
  }
txt=txt + "</table>";
document.getElementById('txtCDInfo').innerHTML=txt;
 }
}
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
</script>
</head>
<body>
<div id="txtCDInfo">
<button onclick="loadXMLDoc('http://localhost:8081/sample.xml')">GetDetails</button>
</div>
</body>
</html>

我编写了上面的代码来显示xml文件数据,并将其部署在iis服务器上。每当我想访问xml文件时,它就会显示上述错误。我哪里出错了?我在url位置上应该写什么才能获取xml文件?如果我只写文件名,例如sample.xml,它会显示访问被拒绝的错误。


页面是否也在8081端口上提供服务? - slebetman
只有 XML 页面放在 IIS 服务器上,而 .html 文件保存在本地驱动器中。 - RamyaSree
HTML和XML都必须来自同一个服务器(技术上来说,是相同的URL域名,可以是不同的机器)。在您的情况下,页面具有文件URL,而XML具有localhost:8081 URL,因此,由于不同的域,浏览器将不允许您使用XMLHttpRequest。此外,XMLHttpRequest无法使用文件URL工作(除非修改高级浏览器设置并且不适用于所有浏览器)。 - slebetman
我强烈建议您阅读Chamika的答案,因为那是正确的答案。 - slebetman
1个回答

3

以上代码在IE中运行良好,但在Chrome和FF中不起作用。是否有浏览器故障? - RamyaSree
希望你能看到我所给的答案。进入链接的答案,你会找到解决方案。不是浏览器问题,而是同源策略问题。 - Chamika Sandamal
这里我没有使用网络服务,但是你建议的链接显示了网络服务内容。这个链接适用于我的非HTTP同步请求查询吗?https://developer.mozilla.org/es/docs/XMLHttpRequest/Usar_XMLHttpRequest - RamyaSree
同源策略不基于同步或异步请求。我在上面的链接中提出的一个建议是,在服务器端执行加载sample.xml部分,并公开一个可以使用JavaScript访问的服务或页面方法。这样就在同一域内,您可以无问题地访问它。 - Chamika Sandamal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接