Typeahead Bloodhound requête POST
Je n'arrive pas à obtenir une requête à distance pour utiliser POST correctement.
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()})
}
}
});
Le queryInput.val () n'obtient pas la valeur courante de l'objet seulement la valeur au moment où l'objet bloodhound est instancié. Comment puis-je obtenir la chaîne de requête dans les options de données ajax?
3 réponses
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 le prepare
propriété remote
ou prefetch
, notez que la fonction signature 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;
}
}
});
Rappelez-vous que avec remote
la signature de la fonction change avec function(query, settings)
.
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 aussi important de modifier l'url. Sinon, Tapeahead n'a pas pris la peine de faire une autre demande. J'ai donc ajouté un paramètre bidon à la fin de l'url. Comme ceci
de Cette façon, lorsque les données ajax emballés changé, j'étais assuré une nouvelle requête au serveur.