我想知道如何使用Access-Control-Allow-Origin?
事实上,我尝试将远程文件中的xml数据加载到html(进入a),但在请求期间我遇到了这个错误:
XMLHttpRequest无法加载http://www.mysite.net/douce/bonsplans.xml。 Access-Control-Allow-Origin不允许原点http://mysite.net。
感谢您的回复
嗯,好的,所以我认为我不可能使用这种方法。这是我的源代码:
mypage.html:
<html lang="fr">
<head>
<title>monsite</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="script.js"></script>
<SCRIPT TYPE="text/javascript">
function init(){
loadXMLDoc('http://www.monsite.net/bonsplans.xml');
}
</SCRIPT>
</head>
<body onload="init();" onunload="clear();">
<div id="bonplans" class="panel4" title="Bons plans">
<p style="text-align:left;"><font color="#4e559c" size="3px"><b>Dernières minutes :</b></font></p>
<div id="writeDernieresMinutes"></div>
<p style="text-align:left;"><font color="#4e559c" size="3px"><b>Offres permanentes :</b></font></p>
<div id="writeOffresPermanentes"></div>
</div>
</body>
</html>
这是script.js文件:
function loadXMLDoc(url)
{
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)
{
dernieresminutes="";
x=xmlhttp.responseXML.documentElement.getElementsByTagName("DERNIEREMINUTE");
for (i=0;i<x.length;i++)
{
xx=x[i].getElementsByTagName("DATE");
{
try
{
dernieresminutes=dernieresminutes + "<fieldset><legend><font color='#4e559c' size='2px'>" + xx[0].firstChild.nodeValue + "</font></legend>";
}
catch (er)
{
dernieresminutes=dernieresminutes + "<p>erreur*</p>";
}
}
xx=x[i].getElementsByTagName("CONTENT");
{
try
{
dernieresminutes=dernieresminutes + "<div class=\"row\"><font color='blue' size='3px'><center>" + xx[0].firstChild.nodeValue + "</center></font>";
}
catch (er)
{
dernieresminutes=dernieresminutes + "<p>erreur*</p>";
}
}
dernieresminutes=dernieresminutes + "</font></div></fieldset>";
}
document.getElementById('writeDernieresMinutes').innerHTML=dernieresminutes;
}
{
OffresPermanentes="";
x=xmlhttp.responseXML.documentElement.getElementsByTagName("OFFREPERMANENTE");
for (i=0;i<x.length;i++)
{
xx=x[i].getElementsByTagName("TITRE");
{
try
{
OffresPermanentes=OffresPermanentes + "<fieldset><legend><font color='#4e559c' size='2px'>" + xx[0].firstChild.nodeValue + "</font></legend>";
}
catch (er)
{
OffresPermanentes=OffresPermanentes + "<p>erreur*</p>";
}
}
xx=x[i].getElementsByTagName("CONTENT");
{
try
{
OffresPermanentes=OffresPermanentes + "<div class=\"row\"><font color='blue' size='3px'><center>" + xx[0].firstChild.nodeValue + "</center></font>";
}
catch (er)
{
OffresPermanentes=OffresPermanentes + "<p>erreur*</p>";
}
}
OffresPermanentes=OffresPermanentes + "</font></div></fieldset>";
}
document.getElementById('writeOffresPermanentes').innerHTML=OffresPermanentes;
}
}
xmlhttp.open("POST",url,true);
xmlhttp.send();
}
function getXhr(){
var xhr = null;
if(window.XMLHttpRequest) // Firefox et autres
xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
xhr = false;
}
return xhr
}
所以,事实上,在加载mapage.html期间,脚本必须从远程源加载xml文件,解析它并将内容写入。
答案 0 :(得分:2)
在mysite.net的回复中,它必须包含一个标题:
Access-Control-Allow-Origin: [domain from where you're calling]
(所以,如果你是thissite.com,它将是Access-Control-Allow-Origin: thissite.com
)
或
Access-Control-Allow-Origin: *
(这将允许所有人)。
如果您没有运行mysite.net,则无法执行此操作,您必须使用其他方法来获取此数据。 (除非你能让他们用JSONP提供数据,你最好的办法就是编写服务器端代码来检索它与你想要呈现它的HTML文件在同一个域上运行,然后使用XHR来获取它数据。)
如果您需要帮助向服务器响应添加标头,我们需要知道您正在使用的HTTP服务器,以及您是否正在使用任何类型的脚本语言。