Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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
Javascript Ajax调用给我跨域错误_Javascript_Php_Angularjs_Cross Domain - Fatal编程技术网

Javascript Ajax调用给我跨域错误

Javascript Ajax调用给我跨域错误,javascript,php,angularjs,cross-domain,Javascript,Php,Angularjs,Cross Domain,我刚刚将我的应用程序移动到生产服务器,在尝试使用“www”访问页面时出错 当我尝试以“”的形式加载页面时,它会正确加载页面和内容;当我尝试访问“www.example.com”这样的页面时,我所有的ajax调用都会出现如下错误: 无法加载XMLHttpRequest。不 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 进入 我使用的是PHP和angular。您的网站使用www和不使用www的方式相同吗?若并没有,也许你们可以在ht

我刚刚将我的应用程序移动到生产服务器,在尝试使用“www”访问页面时出错 当我尝试以“”的形式加载页面时,它会正确加载页面和内容;当我尝试访问“www.example.com”这样的页面时,我所有的ajax调用都会出现如下错误:

无法加载XMLHttpRequest。不 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 进入


我使用的是PHP和angular。

您的网站使用www和不使用www的方式相同吗?若并没有,也许你们可以在htaccess中添加重写规则,这样有www的版本和并没有www的版本都能以同样的方式使用?在这种情况下,您不应该得到跨域错误

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

发生此问题的原因是您尚未在服务器端设置访问控制源。您可以通过在服务器端设置来解决此问题

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *"); 

当您从浏览器发出请求时,浏览器会进行预取(有时不会),在这两种情况下,它都会检查
Access Control Allow Origin
是否确实允许您的客户端站点在不同的域上发出请求(web安全)。如果这与您发送请求的来源不匹配,则浏览器会阻止该请求并不会发送该请求

要发出请求,您需要编辑服务器端(在PHP上),您应该允许该域,它还支持通配符:

<?php
header("Access-Control-Allow-Origin: www.example.com");
?>

现在,您可以从任何地方开始发出请求,您还可以将请求限制在特定域,以便只有一个域可以向您发送请求,如:


标题(“访问控制允许来源:example.com”)

这是意料之中的。各国:

如果两个页面的协议、端口(如果指定了一个)、和主机相同,则两个页面具有相同的来源

www.example.com
example.com
是不同的主机名,因此您正在跨越源

虽然口语是指跨域请求,但重要的是跨来源请求;跨域请求只是其中的一个子集

不要在多个主机名上托管您的站点,选择一个并坚持使用它。(您可能需要设置从另一个到它的重定向)


使用相对URI而不是绝对URI也可以减少此类错误的可能性。

[请参考此问题。跨域ajax请求]()您必须在服务器端添加
访问控制允许源文件
头文件。但我不会请求其他域。为什么我的ajax请求被视为一个不同的域(url中的www)?是的,www实际上是一个子域类型,所以example.com和www.example.com是两个不同的东西,人们通常用别名来表示同一个东西
Access Control Allow Headers
不支持通配符,请参阅文档!如果我从www.example.com重定向到example.com,而不是ajax调用,则必须手动添加希望客户端允许的所有头?@SureshKamrushi-如果您从www.example.com重定向到example.com,则请求的来源将是example.com。由于您向example.com发出请求,它们将具有相同的来源,因此相同的来源策略不会阻止JS读取响应。