Je n'arrive pas à obtenir une requête à distance pour utiliser correctement 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 () n'obtient pas la valeur actuelle de l'objet, seule la valeur au moment où l'objet limier est instancié. Comment puis-je obtenir la chaîne de requête dans les options de données ajax?
Vous pouvez utiliser beforeSend de $ .ajax
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"
}
}
});
Vous pouvez utiliser la propriété prepare
avec remote
ou prefetch
, sachez que la signature de la fonction change. Un exemple avec 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;
}
}
});
N'oubliez pas qu'avec remote
la signature de la fonction change avec function(query, settings)
.
Pour référence: github.com/Twitter/typeahead.js/issues/1236
J'ai trouvé que la méthode ajax 'beforeSend' mentionnée par holylaw fonctionnait le mieux.
Il était toutefois important de modifier également l'URL. Sinon, Typeahead n'a pas pris la peine de faire une autre demande. J'ai donc ajouté un faux paramètre à la fin de l'URL. Comme ça
De cette façon, lorsque les données ajax emballées ont changé, on m'a assuré une nouvelle demande au serveur.