自动完成建议不适用于 ajax
Autocomplete suggestion not working for ajax
我已经使用 bootstrap 自动完成功能的预输入。
以下代码运行完美:
$(function () {
var $input = $(".typeahead");
$input.typeahead({
source: [
{id: "someId1", name: "Display name 1"},
{id: "someId2", name: "Display name 2"}
],
minLength: 2
});
});
但我想使用 ajax 搜索。所以我做了如下更改:
$(function () {
var $input = $(".typeahead");
$input.typeahead({
source: function(query, process) {
return $.get('/search/good/auto-complete?term='+$('#search_searchtext').val());
},
minLength: 2
});
});
以上代码执行 ajax 请求,但未显示来自 ajax 响应的建议。
所以请建议我该怎么做。
尝试
$(function () {
var $input = $(".typeahead");
$input.typeahead({
source: function(query, process) {
return $.getJSON(
'/search/good/auto-complete?term='+$('#search_searchtext').val(),
//{ query: query }, // <- Maybe you can use it instead of ?term='+$('#search_searchtext').val()
function (data) {
var newData = [];
$.each(data, function(){
newData.push(this.name);
});
process(newData);
return;
});
},
minLength: 2
});
});
对于 typeahead 插件,我认为您需要配置 bloodhound 引擎。请参考文档 -
https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md
应该是这样的 -
var data= new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/api/data?query=%QUERY',
wildcard: '%QUERY'
}
});
然后您可以将源作为上述数据对象,如下所示 -
$('#input').typeahead({
hint: true,
highlight: true,
valueKey: 'name',
minLength: 1
}, {
name: 'title',
display: 'name',
source: data
});
你可以试试看。
我已经使用 bootstrap 自动完成功能的预输入。
以下代码运行完美:
$(function () {
var $input = $(".typeahead");
$input.typeahead({
source: [
{id: "someId1", name: "Display name 1"},
{id: "someId2", name: "Display name 2"}
],
minLength: 2
});
});
但我想使用 ajax 搜索。所以我做了如下更改:
$(function () {
var $input = $(".typeahead");
$input.typeahead({
source: function(query, process) {
return $.get('/search/good/auto-complete?term='+$('#search_searchtext').val());
},
minLength: 2
});
});
以上代码执行 ajax 请求,但未显示来自 ajax 响应的建议。
所以请建议我该怎么做。
尝试
$(function () {
var $input = $(".typeahead");
$input.typeahead({
source: function(query, process) {
return $.getJSON(
'/search/good/auto-complete?term='+$('#search_searchtext').val(),
//{ query: query }, // <- Maybe you can use it instead of ?term='+$('#search_searchtext').val()
function (data) {
var newData = [];
$.each(data, function(){
newData.push(this.name);
});
process(newData);
return;
});
},
minLength: 2
});
});
对于 typeahead 插件,我认为您需要配置 bloodhound 引擎。请参考文档 -
https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md
应该是这样的 -
var data= new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: '/api/data?query=%QUERY',
wildcard: '%QUERY'
}
});
然后您可以将源作为上述数据对象,如下所示 -
$('#input').typeahead({
hint: true,
highlight: true,
valueKey: 'name',
minLength: 1
}, {
name: 'title',
display: 'name',
source: data
});
你可以试试看。