Sto facendo una webapp con html + jquery e un backend di servizio di restituzione java. Ho un campo di testo, con suggerimenti di tipo typeahead, quindi ogni carattere che l'utente digita nel campo attiverà un giro di andata e ritorno del server e aggiornerà l'elenco di suggerimenti typeahead.jquery ajax: si verificano eventi di tipo typeahead nell'ordine corretto?
parti essenziali del codice:
var showTypeaheadSuggestions = function(data) {
// update ui-element ...
}
var displayFailure = function() {
// update ui-element ...
}
var searchText = $("#searchText");
var searchTextKeyup = function() {
var txt = searchText.val();
$.ajax({
url : typeaheadUrl(txt),
type : 'GET',
dataType : 'json',
}).done(showTypeaheadSuggestions).fail(displayFailure);
}
searchText.on('keyup', searchTextKeyup);
Si tratta fondamentalmente di lavoro. Ma stavo pensando a cosa succede se si digita, ad esempio, 2 lettere "ab" (che innescherà prima una richiesta di "a" e quindi una richiesta di "ab") ...
Quindi, cosa succede se la risposta "a" richiede un po 'più tempo per elaborare e arriva dopo la risposta "ab"? Ho bisogno di rilevare nel mio codice, per eliminare la risposta "a"?
In http://api.jquery.com/jquery.ajax/ lo fa dice:
Promessa callback - .done(), .fail(), .sempre(), e .then() - sono invocato, nell'ordine in cui sono sono registrati
Che cosa significa esattamente? Speravo che questo significasse che $ .ajax() gestiva automaticamente lo scenario sopra corretto.
Ma quando faccio un piccolo test (sul lato server ho semplicemente iniettato un 2 secondi sonno-ritardo, solo quando la ricerca stringa è esattamente "a"), si scopre lo fa non si comportano come mi aspettavo.
L'elenco di typeahead viene innanzitutto aggiornato con la risposta "ab" e quindi quando arriva la risposta "a" , viene aggiornata anche la lista dei tipi di caratteri che ricevono suggerimenti errati.
Qual è il modo stabilito di gestirlo correttamente?
Interessante ... anche se mi sto sforzando di capire come funziona davvero :) --- Cosa valuta l'espressione "nuova richiestaClass()" in realtà? ---- requestClass() è una chiamata alla funzione senza ritorno stmt, quindi dovresti valutare (se ricordo bene) l'ultima espressione nella funzione ... quale qui è cosa? :) – Rop
La parola chiave 'new' crea un'istanza di un oggetto, imposta la sua funzione di costruzione su' requestClass() 'e la chiama. Poiché la funzione non restituisce alcun risultato, il 'new requestClass()' restituirà il riferimento all'oggetto istanziato. Dai un'occhiata [qui] (http://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript#answer-3658673) per saperne di più sulla parola chiave 'new'. –