如何使用Access-Control-Allow-Origin?

时间:2012-01-05 12:58:55

标签: php html ajax

我想知道如何使用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文件,解析它并将内容写入。

1 个答案:

答案 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服务器,以及您是否正在使用任何类型的脚本语言。