Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 没有访问控制允许源标题,但它是_Ajax_Angularjs_Cross Domain - Fatal编程技术网

Ajax 没有访问控制允许源标题,但它是

Ajax 没有访问控制允许源标题,但它是,ajax,angularjs,cross-domain,Ajax,Angularjs,Cross Domain,我在前端使用AngularJS,在后端使用PHP,在开发过程中使用Yeoman(使用AngularGenerator) 尝试通过$http服务发出AJAX请求时,我遇到以下错误: XMLHttpRequest cannot load https://someweb.com/some/path/app/scripts/php/getSomething.php?term=someParticularValue. No 'Access-Control-Allow-Origin' header is

我在前端使用AngularJS,在后端使用PHP,在开发过程中使用Yeoman(使用AngularGenerator)

尝试通过$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分钟。我一点生产力都没有

对问题的根源有什么想法吗


提前非常感谢。

要在Angular中使用CORS,我们需要告诉Angular我们正在使用CORS。我们使用
.config()
方法设置两个选项

  • 我们需要告诉Angular使用XDomain和
  • 我们必须从所有请求中删除X-request-With头

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

  • 您不需要在角度方面做任何事情,应该在php方面配置CORS。ps浏览器没有cors问题总是

    好消息,我设法解决了!我回来只是想告诉大家问题出在哪里,如果这对其他人有帮助的话

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

    所以,我需要做的唯一一件事就是告诉合适的人正确地改变网络,以避免重定向造成的问题。事实上,我认为他删除了重定向


    很抱歉让您白费心思,谢谢您的尝试。

    我现在无法测试,但明天我会测试。但是,我不认为这是一个问题,因为1)我已经尝试删除了那个标题(没有将useXDomain设置为true),2)它在Mac电脑上使用相同的PHP,没有类似的配置(在同一个项目的旧版本和混乱版本中,我找不到不同之处),我也面临着同样的问题。。。我尝试了您提供的解决方案。。效果非常好。@DanielM检查php页面的Url是否能够返回json。这可能是唯一的问题我不确定你说什么(有时我的英语不够好,这也没用)。PHP URL是正确的,因为当我得到错误时,我可以看到我得到错误的URL;然后我可以在一个新的选项卡上打开它,JSON被正确返回,事实上,这是非常疏远的。。。事实上,当我尝试从浏览器访问URL时,它可以正常工作。我认为浏览器和curl都没有CORS问题。