first child before after jquery typeahead typeahead.js twitter-typeahead

before - jquery first child



PeticiĆ³n Headhound POST solicitud (3)

Parece que no puedo obtener una consulta remota para utilizar POST correctamente.

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()}) } } });

El queryInput.val () no obtiene el valor actual del objeto, solo se crea una instancia del valor en el momento en que se crea un objeto de sabueso. ¿Cómo puedo obtener la cadena de consulta en las opciones de datos ajax?


Encontré que el método ajax ''beforeSend'' que Holylaw mencionó funcionó mejor.

Aunque era importante alterar la url también. De lo contrario, Typeahead no se molestó en hacer otra petición. Así que acabo de agregar un parámetro falso al final de la url. Me gusta esto

http://mylittleservice.com?blah=%QUERY

De esa manera, cuando los datos ajax empaquetados cambiaron, se me aseguró una nueva solicitud al servidor.


Puede usar la propiedad de prepare con remote o prefetch , prefetch cuenta que la función de firma cambia. Un ejemplo con 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; } } });

Recuerde que con la función remote la firma cambia con la function(query, settings) .

Para referencia: github.com/twitter/typeahead.js/issues/1236


Se puede usar antes de Enviar $ .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" } } });