【发布时间】:2018-06-24 07:37:38
【问题描述】:
我知道这个问题以前被问过很多次,但我确实尝试了所有方法,但我仍然收到此错误。
我正在尝试通过我的 index.php 文件中的 ajax 获取 json 数据。 我在 ubuntu 服务器上通过 apache2 运行我的网站。我不知道从这里去哪里。
确切错误:
Failed to load http://localhost:32348/getinfo: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
我尝试了什么: - 将此添加到 /etc/apache2/apache2.conf 文件中
<ifModule mod_headers.c>
Header set Access-Control-Allow-Origin: *
</ifModule>
- 将此添加到 /etc/apache2/apache2.conf 文件的每个 <Directory> 标记之间:
Header set Access-Control-Allow-Origin "*"
- 将此添加到我的 index.php 文件中:
<?php
header('Access-Control-Allow-Origin: *');
?>
- 将 'json' 更改为 'jsonp',将 crossDomain 设置为 true 并添加标头以允许来源
function fetchLiveStats() {
$.ajax({
url: api + '/getinfo',
dataType: 'jsonp',
type: 'GET',
crossDomain: true,
headers: {'Access-Control-Allow-Origin': '*'},
success: function(response) {
console.log(response);
},
cache: 'false'
}).done(function(data){
pulseLiveUpdate();
lastStats = data;
currentPage.update();
}).always(function () {
setTimeout(function() {
fetchLiveStats();
}, refreshDelay);
});
}
【问题讨论】:
-
你是否设置了你的 apache 允许的 HTTP 动词?
-
@MikeTung 你是说端口吗?
-
您的 ajax 选项很荒谬,很可能会导致您的问题。 CORS 比较简单。如果您的请求很简单(没有发送额外的标头,没有 auth cookie 等),您的服务器需要处理的只是请求本身。如果您添加更多标头,例如您添加到选项中的虚假 Access-Control 标头,则浏览器将改为发送预检,这是您的 API 必须正确响应的附加请求。
-
如果你想使用 CORS 来做这个请求,
dataType:'jsonp'是错误的。你想要json。此外,访问控制标头需要由服务器而不是客户端发送。 “尝试了所有可能的解决方案” 实际上是您问题的一部分。您应该退后一步,了解 CORS 是什么以及 CORS 是如何工作的,然后您将能够过滤掉那些可行的 BS 解决方案。 developer.mozilla.org/en-US/docs/Web/HTTP/CORS 是一个很好的起点。
标签: javascript php ajax apache xmlhttprequest