我正在尝试在互联网上阅读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的开发人员标签的网络标签上
答案 0 :(得分:0)
您必须在托管http://xxxxx.com/YYYY.xml
的服务器上启用CORS,而不是在托管HTML文档的服务器上启用CORS(在您的示例中为localhost
)。
您不能允许自己访问其他服务器。