我有一个带有 ElasticSearch 的自动完成 jquery 功能。输入第一个字母时出现以下错误。
跨域请求被阻止:同源策略不允许读取位于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
});
});
Run Code Online (Sandbox Code Playgroud)
我也试过没用'Access-Control-Allow-Origin': '*'。
当我尝试jsonp而不是json,我得到
语法错误(这是正常的,因为我的代码需要 json 而不是 jsonp 的东西)
在服务器上:我做到了,
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
Run Code Online (Sandbox Code Playgroud)
STILL 没有解决问题
使用允许用户通过更改 http 响应在任何地方启用 CORS 的浏览器插件。
火狐:https : //addons.mozilla.org/en-US/firefox/addon/cors-everywhere/
铬:https : //chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf/
Safari:无需安装任何附加组件,只需转到“开发”>“禁用跨域限制”即可。如果您在 Safari 中没有“开发”菜单,请按照以下说明操作:
| 归档时间: |
|
| 查看次数: |
18418 次 |
| 最近记录: |