我有一个简单的PHP文件,它执行MySQL查询并返回结果。
在PHP文件的顶部,我有这段代码:
<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
?>
我知道这就好像我要在Chrome中检查一样,如果我查看“网络”标签中返回的请求标题,我可以看到标题已成功设置。
现在我使用jQuery从另一个域的JavaScript文件中调用:
var getMyResults = $.ajax({
url: "http://mydomain.uk/myphpfile.php",
data: {something: "someData"},
dataType: "JSON",
type: "GET"
});
每次我从JavaScript文件运行此代码时,都会出现以下错误:
XMLHttpRequest无法加载http://mydomain.uk/myphpfile.php。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://myotherdomaincallingthefile.uk”访问。
为什么会这样?
答案 0 :(得分:1)
在你到达最后一页之前有一个重定向,它发送标题,找到它;如果它在.htaccess中,你可以将其添加到.htaccess文件中:
<ifModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</ifModule>
或您的其他选项在您的Ajax调用中使用最终的URL,这将提供标题而不会有任何重定向。
答案 1 :(得分:0)
经过几个小时的调查后,我在评论的帮助下找到了t3chguy的问题。
我的AJAX请求网址:&#34; http://mydomain.uk/directory&#34;
正确,工作交叉起源AJAX:&#34; http://mydomain.uk/directory/&#34;
一个额外的&#34; /&#34;解决了这个问题。
<强>为什么吗
在http://redirectcheck.com/的帮助下,我看到没有&#39; /&#39; Apache正在进行重定向,这意味着该初始请求中没有交叉原始标题,因此出现错误。