【问题标题】:AJAX post to external url [duplicate]AJAX 发布到外部网址 [重复]
【发布时间】:2013-05-04 02:59:01
【问题描述】:

我正在尝试使用以下代码将使用 ajax 的数据发布到外部 url:

$(document).ready(function(){
    $('.submit_button').click(function() {
        $.ajax({
                type : 'POST',
                url : 'http://site.com/post.php',
                dataType : 'text',
                data: $("#infoForm").serialize()
        }).done(function(results) {
                    alert(results);
        });
        event.preventDefault();
    });
});

但我收到以下错误:

XMLHttpRequest 无法加载 http://site.com/post.php。 Access-Control-Allow-Origin 不允许 Origin null。

我还在服务器上的 htaccess 文件中添加了以下行

Header set Access-Control-Allow-Origin *

谁能告诉我我做错了什么以及如何将数据发布到外部网址?

【问题讨论】:

  • 有你想要的答案的相关帖子:stackoverflow.com/questions/3988080/…
  • "我做错了什么" 您使用浏览器发布到跨域服务器,如果没有适当的 CORS 标头,这是不允许的。 “我如何将数据发布到外部 url” 使用 CORS,但知道 IE7 不支持它并且 jQuery 在 IE8 或 IE9 中没有正确实现它,所以你必须这样做它没有 jQuery,或者扩展 jQuery。
  • 您无法搜索该错误消息,也无法找到有关 javascripts 同源策略的其他海量问题之一?

标签: php jquery ajax post extern


【解决方案1】:

外部 URL 是您的吗?如果不是,那是不可能的。如果是,您必须在该域上返回以下标头:

Access-Control-Allow-Origin: http://your.domain.com

或者如果您想允许所有域:

Access-Control-Allow-Origin: *

更多信息可以在这里找到:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS

如果不是您的域,您必须创建一个代理,创建一个 PHP 文件,从该域获取您需要的内容。并向您自己的域发出 ajax 请求。

【讨论】:

  • 我忘了提到我曾尝试将标题添加到 .htaccess 文件中,但它们不起作用。我刚刚将 .htaccess 修改为: Header set Access-Control-Allow-Origin "*" 这似乎有效,感谢你们的帮助!
【解决方案2】:

您不能使用 Ajax 向另一个域发送请求,除非您使用 CORS。这是由于same-origin policy。如果你拥有服务器,你可以在 Apache 中设置 CORS,方法是创建一个 .htaccess 文件,内容为 Access-Control-Allow-Origin: *

【讨论】:

  • 你不应该假设每个人都在使用 Apache,只有一半的网站使用它作为 Web 服务器。例如,五分之一的读者可能正在使用 Nginx。
猜你喜欢
  • 1970-01-01
  • 2018-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 2012-05-30
  • 2016-09-13
  • 1970-01-01
相关资源
最近更新 更多