自动填充建议不适用于ajax

时间:2017-03-07 09:28:06

标签: jquery ajax twitter-bootstrap typeahead.js bootstrap-typeahead

我使用bootstrap typeahead作为自动完成功能。

以下代码工作正常:

$(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响应的建议。

所以请建议我怎么做。

2 个答案:

答案 0 :(得分:1)

尝试

$(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
    });
});

答案 1 :(得分:0)

对于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
});

你可以尝试一下。