POSTを正しく使用するためのリモートクエリを取得できないようです。
var creditors = new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.value)
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: "../getCreditors",
replace: function(url, query) {
return url + "#" + query;
},
ajax : {
type: "POST",
data: $.param({q: queryInput.val()})
}
}
});
queryInput.val()はオブジェクトの現在の値を取得せず、bloodhoundオブジェクトがインスタンス化されたときの値のみを取得します。クエリ文字列をajaxデータオプションに取り込むにはどうすればよいですか?
$ .ajaxのbeforeSendを使用できます
var creditors = new Bloodhound({
datumTokenizer: function (d) {
return Bloodhound.tokenizers.whitespace(d.value)
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
remote: {
url: "../getCreditors",
replace: function(url, query) {
return url + "#" + query;
},
ajax : {
beforeSend: function(jqXhr, settings){
settings.data = $.param({q: queryInput.val()})
},
type: "POST"
}
}
});
関数のシグネチャが変更されることに注意して、prepare
プロパティをremote
またはprefetch
で使用できます。 prefetch
の例:
_var Bloodhound = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.whitespace,
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: {
url: remote,
prepare: function (settings) {
settings.type = "POST";
settings.contentType = "application/json; charset=UTF-8";
return settings;
},
remote: function (query, settings) {
settings.type = "POST";
settings.data = {q: query, foo: 'bar'}; // you can pass some data if you need to
return settings;
}
}
});
_
remote
を使用すると、function(query, settings)
を使用して関数のシグネチャが変わることに注意してください。
言及したajaxの「beforeSend」メソッドholylawが最も効果的であることがわかりました。
ただし、URLを変更することも重要でした。それ以外の場合、Typeaheadは別の要求を行う必要はありませんでした。だから私はちょうどURLの最後に偽のパラメータを追加しました。このような
そうすることで、パッケージ化されたajaxデータが変更されたときに、サーバーへの新しい要求が保証されました。