POST リクエストのみを受け取るサーバー側のページがあるため、Bloodhound のリモート プロパティで jquery ajax セットアップを使用する必要があります。すべてが機能しますが、一度だけです。その後、先行入力ボックスのテキストが変更されると、フィルタ関数が呼び出されますが、新しいデータを取得するための新しいサーバー側要求は起動されません。最初のリクエストで取得したデータをフィルタリングするだけです。ユーザーがテキストを削除して別のものを入力すると、新しいリクエストを作成する必要があります。
私はタイプアヘッドが初めてで、これを理解するのに多くの時間を費やしています。これが私のコードです。
var users = new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: 'fake.jsp',
filter: function (users) {
return $.map(users, function (user) {
return {
value: user.USER_ID,
name: user.DISPLAYNAME
};
});
},
ajax: {
type: 'POST',
data: {
param: function(){
return $('#userid').val();
}
},
context: this
}
}
});
users.initialize(true);
$('#userid').typeahead({
minLength: 3,
highlight: true
}, {
name: 'userslist',
displayKey: 'name',
source: users.ttAdapter()
});