2010-04-28 15 views
7

Ho letto diversi articoli/domande/forum che discutono il miglior plugin auto-completo per jQuery. Dopo aver provato molti buoni, ho realizzato un difetto nella maggior parte dei casi.jQuery/AJAX type-ahead/auto-complete

  1. Se stai cercando paesi e digita "In", un paio di paesi si presentano. Se continui a digitare I-n-d-i-a, questo risulta in 5 chiamate AJAX (vedi http://www.freeimagehosting.net/uploads/6f1bcd69e1.png) è abbastanza naturale che l'India sia un sottoinsieme di In, quindi perché chiamare di nuovo? Dobbiamo semplicemente filtrare l'elenco dei client recuperati dal lato client. Qualcuno sa di una tale implementazione?

  2. Qual è lo stato della funzione di completamento automatico di Jquery? Ho letto su StackOverflow che non è più disponibile con Jquery; ma il sito Web di Jquery ha un segno "Nuovo" oltre al collegamento al completamento automatico.

Grazie

+0

Sembra un'opportunità per scrivere un plug-in migliore. Immagino che solo il primo, ad es. 10 risposte, vengano restituite per, e tu hai bisogno di requery per ottenere tutti gli ind. Ma se ci sono meno risposte rispetto alla soglia, allora quelle dovrebbero essere riutilizzate come suggerisci tu. –

+0

Questo è davvero un buon punto in quanto se si aggiunge alla query alla fine, è possibile filtrare ciò che si ha. Qualche plugin prende ancora in considerazione questa idea? Questa domanda è stata fatta quasi due anni fa e sono curioso di sapere la risposta. – vbullinger

risposta

8

Il punto si scrive su di 1. potrebbe essere perché:

  • Cerca per 'In' shoudl restituire un sacco di risultati
  • v'è un certo limite sul lato server, per non restituire mai più di N risultati
  • Che significa l'elenco completo del conteggio Ries contiene "In" non è noto, sul lato client
  • il che implica che non è possibile ottenere (di sicuro) lista che corrisponde a "Ind" senza un'altra richiesta Ajax.

Una mezza soluzione che viene spesso utilizzata è quella di non inviare una richiesta Ajax immediatamente dopo la pressione di un tasto, ma solo dopo 100 o 200 millisecondi.

In questo modo, se l'utente digita "Indi" Veloce, e aspetta prima di digitare qualsiasi altra cosa, l'saranno solo 1 richiesta Ajax, per "Indi" (e nessuno per "In", "Ind")

+0

Ooh si, l'ho già fatto per ridurre il numero di richieste. Lo scenario che hai discusso è valido, ma ci possono essere parametri definiti per evitare questo comportamento subottimale. – Prasad

3

Il completamento automatico dell'interfaccia utente jQuery è stato aggiunto nella nuova versione 1.8, quindi per quanto ho visto nell'attività del progetto è ancora in fase di sviluppo. C'è uno example che utilizza una cache lato client per quanto riguarda il problema che hai spiegato. Puoi anche utilizzare l'opzione ritardo già citata.

+0

Buono a sapersi che continueranno con il completamento automatico. Tuttavia, questo esempio non è il migliore in termini di memorizzazione nella cache. Prova a trovare "Nightingale" un carattere alla volta ..Quando si passa da "night" (5 risultati) a "nighti" (2 risultati), viene emessa una chiamata :( Indovina dovrò convivere con le chiamate aggiuntive :(:(:( – Prasad

+0

Beh, quello che fanno è solo semplice corrispondenza regex. Quindi, prima di inviare una nuova richiesta, dovresti semplicemente abbinare la tua lista cache. Per le fonti remote devi sempre considerare che potresti non ottenere l'intero elenco per l'inserimento, ad esempio * In *, potrebbe essere limitato anche a un numero massimo di oggetti, quindi dovrai comunque inviare un nuovo evento per la prossima lettera. – Daff