没有Access-Control-Allow-Origin标头,但确实如此

时间:2014-08-27 15:28:14

标签: ajax angularjs cross-domain

我在前端使用AngularJS,在后端使用PHP,在开发期间使用Yeoman(使用角度生成器)。

尝试通过$ http服务发出AJAX请求时出现以下错误:

XMLHttpRequest cannot load 
https://someweb.com/some/path/app/scripts/php/getSomething.php?term=someParticularValue. 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:9000' is therefore not allowed access.

但是,标题在PHP端正确设置,实际上我在尝试直接在浏览器中输入URL时根本没有任何跨域问题(我得到了我期待的JSON,当看起来通过Chrome DevTools在标题处看起来一切正常。)

Angular中的AJAX调用如下所示:

$http.get(phpBaseUrl + 'getSomething.php', {
    params: { term: someValue }
})
.then(function (res) {
    // Do something with res.data ...
});

我也尝试过与Firefox相同的代码,因为我读到Chrome中可能存在一些问题。我正在使用Linux(Ubuntu 14.04)。

我有点绝望,因为对于我改变的每个单个字符,我必须将文件上传到服务器,如果我想检查新的东西是否正常工作,这实际上需要我大约1到2分钟。我根本没有工作效率!

关于问题根源的任何想法?

提前非常感谢你。

3 个答案:

答案 0 :(得分:1)

要在Angular中使用CORS,我们需要告诉Angular我们正在使用CORS。我们用的是 我们的Angular应用模块上的.config()方法设置了两个选项。

  1. 我们需要告诉Angular使用XDomain和
  2. 我们必须从所有请求中删除X-Requested-With标头

    angular.module('myApp')
     .config(function($httpProvider) {
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers
                .common['X-Requested-With'];
    });
    

答案 1 :(得分:0)

你不应该在角度方面需要任何东西,它应该是配置CORS的php端。 ps浏览器总是没有cors问题

答案 2 :(得分:0)

好消息,我设法解决了!我回来只是为了分享问题所在,如果这对任何人都有帮助。

问题是我在一个相当大的网络中工作,我不理解他的所有观点。问题是:X-Domain问题似乎出现在我调用的PHP文件中(这是浏览器说的 - 事实上这些文件已经发送了正确的标题,我没有修改它们)。但事实并非如此;真正的X-Domain问题是由另一个实现必要登录系统的文件(可能不是PHP,我不知道)产生的。我被重定向到这个"隐藏"每次我尝试向第一个请求时,引擎盖下的文件。 "隐藏"文件,我无法控制,没有正确的标题来允许X-Domain调用,当然,这就是为什么我的电话没有成功。

所以,我唯一需要做的就是告诉合适的人正确更改网络,以避免重定向导致的这个问题。事实上,我认为他删除了重定向。

很抱歉让你白白思考,谢谢你的尝试。