【问题标题】:XMLHttpRequest cannot load http://localhost:8081/sample.xml. Origin null is not allowed by Access-Control-Allow-Origin.XMLHttpRequest 无法加载 http://localhost:8081/sample.xml。 Access-Control-Allow-Origin 不允许 Origin null。
【发布时间】:2013-03-25 07:01:58
【问题描述】:
<!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 文件时,它都会显示上面的错误。我在哪里做错了。我必须写什么在获取 xml 文件的 url 位置。如果我只写像 sample.xml 这样的文件名。它显示像 Access denied 这样的错误。

【问题讨论】:

  • 页面是否也在 8081 端口提供服务?
  • no.only xml 页面放置在 iis 服务器中。并且 .html 保存在本地驱动器中。
  • html 和 xml 必须来自同一个服务器(技术上相同的 url 域,可以是不同的机器)。在您的情况下,该页面有一个文件 url,而 xml 有 localhost:8081 url,因此由于域不同,浏览器将不允许您使用 xmlhttprequest。此外,xmlhttprequest 不能与文件 url 一起使用(不能不修改高级浏览器设置,也不能与所有浏览器一起使用)
  • 我强烈建议您阅读 Chamika 的答案,因为它是正确答案。

标签: javascript iis


【解决方案1】:

这是因为Same origin policy。您不能使用 ajax 调用外部站点。如果你真的要使用,你必须使用JSONP。或者您可以为此使用服务器端代理。意思是,在服务器端调用外部站点并对那个 web 服务进行 ajax 调用。 有关更多详细信息,请参阅我对以下问题的回答, $.ajax call working fine in IE8 and Doesn't work in firefox and chrome browsers

【讨论】:

  • 以上代码在 IE 中运行良好,但在 Chrome 和 FF 中无法运行。是否有任何浏览器故障..
  • 希望您能阅读我给出的答案。转到链接的答案,您将找到解决方案。没有浏览器问题。同源政策问题
  • 这里我没有使用网络服务对吗?但建议您链接显示网络服务内容。此链接是否适合我的查询非 HTTP 同步请求developer.mozilla.org/es/docs/XMLHttpRequest/…
  • 同源策略不基于同步或异步请求。我在上面的链接中的一个建议是在服务器端加载 sample.xml 部分并公开可以使用 javascript 访问的服务或页面方法。所以这将在同一个域内,您可以毫无问题地访问它。
猜你喜欢
  • 2013-11-03
  • 1970-01-01
  • 2012-06-05
  • 2012-05-25
  • 2013-01-24
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多