2013-05-09 62 views
-3

我试图用Ajax数据发布到下面的代码外部网址: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 cannot load http://site.com/post.php . Origin null is not allowed by Access-Control-Allow-Origin.

我也有添加下面的行到我的服务器上的htaccess文件

Header set Access-Control-Allow-Origin * 

任何人都可以告诉我我做错了什么,我可以发布数据到外部网址?

+0

相关文章,你想要的答案:http://stackoverflow.com/questions/3988080/jquery-post-to -external-php?rq = 1 – StoicJester 2013-05-09 15:12:00

+0

“*我做错了什么*”您使用浏览器发布到跨源服务器,如果没有正确的CORS头文件,这是不允许的。 *“如何将数据发布到外部URL”*使用CORS,但知道IE7不支持jQuery并且在IE8或IE9中没有正确实现它,所以您必须在没有jQuery的情况下执行此操作,或者扩展jQuery。 – 2013-05-09 15:12:36

+2

你不能搜索那个错误信息,并找到关于javascripts同源策略的其他gazillion问题之一? – adeneo 2013-05-09 15:13:17

回答

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请求到你自己的域名。

+0

我忘了提及我已经尝试将标头添加到.htaccess文件,但它们不起作用。我只是修改.htaccess为: 标题设置访问控制允许来源“*” 这似乎工作,感谢您的帮助家伙! – Daniil 2013-05-09 15:28:35

0

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

+0

你不应该假设每个人都在使用Apache,只有一半的网站使用它作为Web服务器。例如,五分之一的读者可能使用Nginx。 – MattWithoos 2014-11-26 03:55:30