【问题标题】:Error on cross request: "Origin is not allowed by Access-Control-Allow-Origin"?交叉请求错误:“访问控制允许来源不允许来源”?
【发布时间】:2012-05-29 18:00:04
【问题描述】:

我正在尝试从我的一个网站加载另一个网站的内容:

<div id='include-from-outside'></div>
<script type='text/javascript'>
  $('#include-from-outside').load('http://lujanventas.com/plugins/banner/index.php&callback=?');
</script> 

但是我收到了这个错误:

XMLHttpRequest cannot load http://lujanventas.com/plugins/banner/index.php&callback=?. Origin http://lventas.com is not allowed by Access-Control-Allow-Origin.

我怎样才能防止它发生?

【问题讨论】:

    标签: javascript jquery xml include


    【解决方案1】:

    有两种选择:

    1: 使 http://lujanventas.com 返回正确的 CORS 标头 -- http://enable-cors.org/

    2: 使用你的服务器而不是浏览器中的 js 请求 html -- http://www.daniweb.com/web-development/php/code/216729/php-proxy-solution-for-cross-domain-ajax-scripting

    【讨论】:

    • 如何添加 CORS 响应标头。我刚刚阅读了很多,但我不知道我必须在哪里添加它们。如何使用服务器请求 HTML?我想不出别的办法。
    • 这个页面概述了如何在各种环境中添加CORS响应头:enable-cors.org至于使用服务器请求它,这里有一篇关于php的好文章:daniweb.com/web-development/php/code/216729/…
    • 第一个选项似乎更有可能,我刚刚阅读了页面。它说Granting JavaScript clients basic access to your resources simply requires adding one HTTP response header, namely Access-Control-Allow-Origin: *,但我在哪里添加这一行?很抱歉,这对我来说是新领域
    • @Liso22 - 进一步阅读页面,它解释了如何根据您使用的环境以多种方式进行操作。
    • 我还没有阅读有关 htaccess 的信息,我创建了一个文件并添加了该行。但是我现在收到 505 服务器错误。可能是什么原因?我稍后会作为新问题提交
    【解决方案2】:

    您使用的网址表明该网站支持 JSONP(请参阅 http://en.wikipedia.org/wiki/JSONP)。如果是这样,您应该可以这样做:

    <script type="text/javascript">
        function handleResponse(json){
           var data = JSON.parse(json);
           ...handle data...
        }
    </script>
    <script src="http://lujanventas.com/plugins/banner/index.php?callback=handleResponse"></script>
    

    【讨论】:

    • +1 -- 对于 IE $.parseJSON(json),因为您已经包含了 jQuery。
    • 我刚试过你的代码,它似乎绕过了错误。但是我收到500 internal server error 这可能是什么原因(我复制了代码并且没有对其进行任何更改)。
    • 是的,我也试过了,我注意到了 500。似乎服务器不愿意接受回调参数,或者他们这边有一个错误。我想,既然你首先提到了那个网址,你就知道你在做什么。如果我是你,我会和给你网址的人核实一下,如果你做对了(没有错别字等)
    • 只是一个问题,我开始使用 CORS 但它在旧浏览器上无法使用。这会更兼容跨浏览器吗?
    • 任何网站都可以转成JSON吗?我试图弄清楚,因为我从来没有这样做过。我将不得不使所有的php输出JSON格式对吗?
    【解决方案3】:

    使用 jquery ajax 查询加载 lujaventas 内容的 php 文件,然后 ajax 回调将是 lujaventas 内容。

    【讨论】:

    • 我明白你的方法了。但我不能使用它,因为我需要将 div+script 作为插件分发
    • 您也可以使用 jsonp ,您需要将横幅格式设置为 json 格式,这将适用于每个浏览器(cors 是扩展)
    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2017-12-28
    相关资源
    最近更新 更多