我正在使用带有Typhead.js的Apache solr在我的应用程序中进行搜索。我的问题是,当从客户端上的AJAX请求调用我的solr API时,我一直收到CORS错误。我正在设置dataType:'jsonp',但它仍然给我CORS错误。谁能看到我做错了什么?我将dataType设置在错误的位置吗?
我正在使用typeahead版本0.11.1
错误:
请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost”访问。
这是我的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Search</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript" src="typeahead.min.js"></script>
</head>
<body>
<input class="typeahead">
<script type="text/javascript">
var things = new Bloodhound({
datumTokenizer: function(datum) {
return Bloodhound.tokenizers.whitespace(datum.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
wildcard: '%QUERY',
url: 'http://localhost:8983/solr/MYCORE/select?q=name:%QUERY',
ajax: {
dataType: 'jsonp',
data: {
'wt': 'json',
},
jsonp: 'json.wrf'
},
transform: function(response) {
return $.map(response, function(value, key) {
return {
value: value.name
};
});
}
}
});
// Instantiate Typeahead
$('.typeahead').typeahead(null, {
hint: true,
display: 'value',
source: things
});
</script>
</body>
</html>
当我手动发出AJAX请求时,它可以正常工作。我似乎无法让它与Bloodhound合作。
$.ajax({
url: URL_TO_SOLR,
success: function(data) {
var docs = JSON.stringify(data.response.docs);
var jsonData = JSON.parse(docs);
response($.map(jsonData, function(value, key) {
return {
label: value.name
}
}));
},
dataType: 'jsonp',
jsonp: 'json.wrf'
});
这很好地通过我的solr服务器。