我知道这个问题之前已经被问了很多,但我确实试了一切,但我仍然遇到了这个错误。
我试图通过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>
- 在每个<Directory>
标记之间添加它到/etc/apache2/apache2.conf文件:
Header set Access-Control-Allow-Origin "*"
- 将其添加到我的index.php文件中:
<?php
header('Access-Control-Allow-Origin: *');
?>
- 改变&#39; json&#39;到&#39; jsonp&#39;,将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);
});
}
答案 0 :(得分:-1)
您需要将Access-Control-Allow-Origin标头添加到http://localhost:32348/getinfo
的响应中。
我尝试了什么: - 将其添加到/etc/apache2/apache2.conf文件
你所说的关于你的问题的其他内容暗示Apache正在端口80上托管网站,而不是端口32348上的网站。你正在改变错误的服务器。
网站无权访问其他网站将向浏览器所有者提供的数据。
改变&#39; json&#39;到&#39; jsonp&#39;
不要使用JSONP。这是一个肮脏的黑客。 (它还要求http://localhost:32348/getinfo
返回JSONP,这几乎肯定不会。(
将crossDomain设置为true
这只是告诉jQuery不添加它添加到Same Origin请求的头文件,以防HTTP重定向到另一个源。这可以防止它成为需要预检的复杂请求。由于您首先没有请求相同的原始网址,因此无效。
添加标题以允许来源
您无法在请求中添加响应标头!
尝试将其转变为需要预检的复杂请求,并使您遇到更多问题。
您需要编辑负责提供http://localhost:32348/getinfo
答案 1 :(得分:-2)
在尝试新的更新时,不要忘记清空缓存(ipconfig / flushdns)和浏览器缓存,否则,可能不会考虑修改...