【发布时间】:2016-06-12 16:40:21
【问题描述】:
我正在尝试从我的本地服务器到其他在线服务器的自动完成功能,就像测试一样。此服务器在我尝试访问的文件夹中配置了基本身份验证。所以我已经完成了 ajax 函数(我正在使用 JQuery UI 自动完成)并且我已经配置了 php 脚本来返回一个 JSON。在同一台服务器上一切正常。
这就是我所做的:
$(function() {
$( "#field" ).autocomplete({
minLength: 1,
source: function (request, response) {
console.log(request.term);
$.ajax({
type: 'POST',
url: url,
data: {
'idautor': 417,
'lat': 43.56,
'lon': -5.96,
'etiqueta': request.term
},
crossDomain: true,
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", btoa(username + ":" + password));
},
success: function( data ) {
response( $.map( data["pines"], function( item ) {
return {
value: item["nombre"],
label: item["nombre"],
idsitio: item["idsitio"],
autor: item["autor"]
}
}));
}
}).then(function(data) {
console.log('data', data);
},
function(err) {
console.log('err', err);
});
},
select: function (event, ui) {
alert("El sitio con id "+ui.item.idsitio+" y autor "+ui.item.autor+" ha sido pulsado.");
}
})
});
问题是当我尝试从本地服务器使用它时,基本上是我所说的跨域 HTTP 请求,我在浏览器控制台中收到以下错误:
XMLHttpRequest 无法加载 URL 对预检请求的响应不 通过访问控制检查:没有“Access-Control-Allow-Origin”标头 出现在请求的资源上。原点“http://localhost”是 因此不允许访问。响应的 HTTP 状态码为 401
所以我研究了这个主题,并找到了几个有希望且简单的解决方案来解决我的问题。我试图将标题添加到 php 文件中:
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: GET,POST,OPTIONS");
header("Access-Control-Allow-Headers: accept, authorization, content-type");
还尝试将它们添加到我的.htaccess 文件中,但完全没有成功。我仍然遇到同样的错误。关于我错过了什么的任何线索?
以防万一和更多信息,这是我发送请求时的 XHR 连接记录,其中我看不到我在 php.ini 中手动添加的新标头。
【问题讨论】:
-
我的 php 服务器遇到了类似的问题,通过添加以下答案中的代码使其正常工作:stackoverflow.com/questions/18382740/cors-not-working-php/… Try it out.
-
@noviewpoint 我试过了,还是一样,不知道为什么,但是有些东西拒绝我修改标题或只是覆盖它......
标签: php jquery ajax xmlhttprequest cors