如果使用Bloodhound和GET:
// Typeahead personsBloodhound = new Bloodhound({ datumTokenizer: function (person) { return person.name; },queryTokenizer: Bloodhound.tokenizers.whitespace,remote: { url: '/ajax/Persons/List?nameContains=%QUERY',ajax: { beforeSend: function(xhr) { $(".searching-person").show(); },data: { "pageSize": 4,"otherParam1": "blah","otherParam2": "bleh",} },filter: function (response) { $(".searching-person").hide(); return response.persons; } } });
一个只是在URL中使用%QUERY.
现在….
如果使用Bloodhound和POST,我应该使用什么而不是%QUERY?
// Typeahead personsBloodhound = new Bloodhound({ datumTokenizer: function (person) { return person.name; },remote: { url: '/ajax/Persons/List',ajax: { type: "POST",beforeSend: function(xhr) { $(".searching-person").show(); },data: { "nameContains": ....WHAT GOES HERE?????...... "pageSize": 4,filter: function (response) { $(".searching-person").hide(); return response.persons; } } });
如果不清楚,问题是:
在Bloodhound的遥控器中使用POST时,%QUERY的等效值是多少?
文档不清楚,(证明):
https://github.com/twitter/typeahead.js/blob/master/doc/bloodhound.md#remote
还尝试使用:
"nameContains": $("#my-input-that-uses-typeahead").val(),
但没有奏效.
解决方法
你必须以某种方式改变URL,否则血腥的人不会发送其他请求(见
https://stackoverflow.com/a/24025789/2175370)和livesearch / typeahead不会工作.
所以(“#my-input-that-uses-typeahead”).val()与动态URL结合使用(eghttp://127.0.0.1:1234 / REST_API / _search?useless =%QUERY) ajax设置中的beforeSend-function.
我将提出有关此行为的问题.使用Bloodhound进行POST请求非常尴尬,并且带走了typeahead.js的简单性.
编辑:
还要确保在beforeSend中设置数据的新值并设置settings.hasContent = true.否则将使用初始数据.
关于如何完成的示例:https://github.com/twitter/typeahead.js/issues/542#issuecomment-29995960.