在Firefox上从Internet-Cross Origin Request Error读取xml文件

时间:2014-07-21 16:04:25

标签: javascript xml firefox cors

我正在尝试在互联网上阅读xml文件。它适用于IE但不适用于Firefox / Chrome。 它在Firefox上给出了以下错误;

阻止跨源请求:同源策略禁止在http://xxxxx.com/YYYY.xml读取远程资源。可以通过将资源移动到同一域或启用CORS来解决此问题。

这是我的代码;

<html>
<head>
<script>
function loadXMLDoc(filename)
{
if (window.ActiveXObject)
  {
  xhttp = new ActiveXObject("Msxml2.XMLHTTP");
  }
else 
  {
  xhttp = new XMLHttpRequest();
  }
xhttp.open("GET", filename, false);
try {xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
xhttp.send("");
return xhttp.responseXML;
}

function displayResult()
{
xml = loadXMLDoc("http://xxxxx.com/YYYY.xml");
...........
.........
}
</script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>

它在行上返回null xhttp.responseXML; 在loadXMLDoc函数中。

收到此错误后,我搜索了错误并尝试了下面的代码,它发出了CORS请求。但它现在也有效。

// Create the XHR object.
function createCORSRequest(method, url) {
  var xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {
    // XHR for Chrome/Firefox/Opera/Safari.
    xhr.open(method, url, true);
  } else if (typeof XDomainRequest != "undefined") {
    // XDomainRequest for IE.
    xhr = new XDomainRequest();
    xhr.open(method, url);
  } else {
    // CORS not supported.
    xhr = null;
  }
  return xhr;
}

// Helper method to parse the title tag from the response.
function getTitle(text) {
  return text.match('<title>(.*)?</title>')[1];
}

// Make the actual CORS request.
function makeCorsRequest() {
  // All HTML5 Rocks properties support CORS.
  var url = 'http://xxxxx.com/YYYY.xml';

  var xhr = createCORSRequest('GET', url);
  if (!xhr) {
    alert('CORS not supported');
    return;
  }

  // Response handlers.
  xhr.onload = function() {
    var text = xhr.responseText;
    var title = getTitle(text);
    alert('Response from CORS request to ' + url + ': ' + title);
  };

  xhr.onerror = function() {
    alert('Woops, there was an error making the request.');
  };

  xhr.send();
}

在makeCorsRequest()函数中,在createCORSRequest()函数之后,xhr.responseText为&#34;&#34;和xhr.ResponseXML为null。在响应处理程序中,它给出了xhr.onerror。

你能帮我解决一下这个错误吗? 感谢。

更新:

我正在尝试在我的计算机上测试我的页面(localhost)。在我的计算机上的IIS中,我使用下面的web.config启用了CORS

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>

在Firefox的开发人员标签的网络标签上

http://imgur.com/CXzxHLj

1 个答案:

答案 0 :(得分:0)

您必须在托管http://xxxxx.com/YYYY.xml的服务器上启用CORS,而不是在托管HTML文档的服务器上启用CORS(在您的示例中为localhost)。

您不能允许自己访问其他服务器。