我有一个自动完成的jquery函数ElasticSearch。当我输入第一个字母时,我得到以下错误。
跨域请求阻塞:同源策略不允许读取远程资源http://localhost:9200/test12/test3/_search?pretty。(原因:CORS头' Access-Control-Allow-Origin '丢失).
代码
$(function () {
$("#keyword").autocomplete({
source: function (request, response) {
$.ajax({
url: "http://localhost:9200/test12/test3/_search?pretty",
data: "q=firstname:" + request.term +"*" ,
dataType: "json",
type: "POST",
headers: {
'Access-Control-Allow-Origin': 'http://localhost'
},
crossDomain: true,
jsonpCallback:"callback",
contentType: "application/json; charset=utf-8",
success: function (data) {
console.log(data);
response($.map(data.d, function (item) {
return {
label: item.split('-')[0],
val: item.split('-')[1]
}
}))
},
error: function (response) {
alert('error'+ response.responseText);
},
failure: function (response) {
alert('failure'+response.responseText);
}
});
},
select: function (e, i) {
$("[id$=keyword]").val(i.item.val);
},
minLength: 1
});
});
我也试过'Access-Control-Allow-Origin': '*'
,但没有工作。
当我尝试jsonp
而不是json
时,我得到
服务器上的语法错误(这是正常的,因为我的代码期望json而不是json的东西)
: I did,
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Max-Age "1000"
Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, origin$
/etc/apache2/apache2.conf
仍然没有解决问题
使用允许用户通过更改http响应来在任何地方启用CORS的浏览器插件。
Firefox: https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/
铬:https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf/
Safari:不需要安装任何插件,只需要去开发>禁用跨域限制。如果在Safari中没有开发菜单,请按照以下说明操作: