Domanda

Sto usando jQuery.autocomplete (1,02) sulla mia casella di ricerca e voglio esattamente di stringa e sottostringa corrispondente. Non mi interessa (ancora!) Circa il carico del database, sono felice per lui a sparare una query ogni battitura e bypassare il caching del tutto -. E 'solo che non voglio nulla perdere

A questo fine ho provato a fissare cacheLength = 1 , il minimo consentito, ma la funzione di completamento automatico si rifiuta di sparare una richiesta GET per ogni tasto su.

searchbox          GET_request

   'a'       ->    http://localhost/service_search_request?q=a
   'ar'      ->    http://localhost/service_search_request?q=ar
   'ars'     ->    http://localhost/service_search_request?q=ars

Invece, invia la prima e la terza e manca il secondo, che mi dà i risultati sbagliati per 'ar': - / Ho schiarii la cache e sessioni, ma sembra che una sorta di cache è ancora in corso. AFAIK non ho alcun proxy in corso e sono shift-rinfrescante ogni volta. Sembra probabile allora che questo comportamento è da jQuery.autocomplete sé.

Quindi le mie domande sono ...

A) Questo sembra probabile? vale a dire si tratta di una caratteristica, o forse un bug?

B) Se è così c'è un modo pulito intorno ad esso? ...

C) Se no, cosa di completamento automatico useresti invece?

Naturalmente D) n stai usando solo in modo errato si Douche è sempre una possibilità, e in effetti quello che preferirei avere tempo speso andare su questa strada - ammesso che viene fornito con un link per la documentazione che ho riuscito a trovare / leggere!

Saluti,

Roger:)

È stato utile?

Soluzione

Mi chiedo il motivo per cui cacheLength non funziona, ma ha avuto problemi con completamento automatico troppo. IMHO, ci sono errori in esso. Tuttavia, nella , v'è una matchSubset è possibile impostare su false.

Modifica da qualche parte intorno alla linea 335 è una funzione chiamata "richiesta". Si potrebbe aggiungere alcuni messaggi di debug ad esso, per vedere cosa succede: (nota: è necessario Firebug installati o "console" sarà sconosciuto)

function request(term, success, failure) {

    console.debug("ac request...");

    if (!options.matchCase)
        term = term.toLowerCase();

    var data = cache.load(term);

    console.debug("ac request 1, loaded data from cache: " + data + " term: " + term);

    // recieve the cached data
    if (data && data.length) {
        success(term, data);
    // if an AJAX url has been supplied, try loading the data now
    } else if( (typeof options.url == "string") && (options.url.length > 0) ){

        console.debug("ac request 2, data is not in the cache, request it");

"flushCache" può essere facilmente utilizzato nella funzione è possibile allegare / impostare come opzioni. Ho usato questo, per cancellare la cache, se ci potrebbe essere più dati nel backend:

formatItem: function (data,i,n,value){
    if(i === (this.max -1)){
        console.debug("flushCache");
        jQuery(this).flushCache();
    }

    return data[1] + " (" + data[0] + ")";
}

Altri suggerimenti

Sto avendo lo stesso problema. Caching non funziona anche se ho impostare l'opzione cacheLength a 1.

Con la soluzione per chiamare la funzione flushCache dopo ogni termine stampata funziona. Non ho potuto usare il:

if(i === (this.max -1)){

poiche 'i' stato per esempio 1 ma dopo filtrazione 'this.max' ancora 25 della query backend originale portato in 25 righe restituite.

Tuttavia , questo bug SOLO viene visualizzata quando si digita le parole che contengono i caratteri svedesi 'A', 'A' o 'O'. Così forse l'incasso funziona come previsto, ma non con questi caratteri speciali.

In ogni caso. la soluzione per me è stato quello di chiamare sempre il controllo flushCache nella funzione FORMATtutti ():

function formatItem(row, position, n, term) {

    if($("#keywords-h").length > 0){
        $("#keywords-h").flushCache();
        }

        // format Item
        return "<span>" + row[0] + "</span>";
}

Spero che questo aiuti qualcuno e se qualcuno sta avendo gli stessi problemi con i caratteri speciali si prega di inviare una risposta.

Sono ovviamente venire in questa 18 mesi, ma

  

cacheLength: 0

nelle opzioni ha lavorato per me. Quindi forse ultima release ha fissato il bug?

Questo ha funzionato per me.

function requestData(q) {
   if (!options.matchCase) q = q.toLowerCase();

   //-- I turned off this line
   // var data = options.cacheLength ? loadFromCache(q) : null;

   //-- And added this line of code
   var data = null;

È possibile disabilitare sottoinsieme corrispondente per esempio.

$("#query").autocomplete(
    url,
    {
        matchSubset: false
    }
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top