Frage

Ich bin mit jQuery.autocomplete (1,02) auf meinem Suchfeld, und ich will genau string und Teilzeichenfolge Anpassung. Ich interessiere mich nicht (noch!) Über die Datenbank laden, ich bin glücklich für sie jeden Tastendruck eine Abfrage abzufeuern und umgehen die Caching vollständig. - Ich will nur nicht, etwas verpasst

Zu diesem Zweck habe ich versucht, Einstellung cacheLength = 1 , die minimal zulässigen, aber die Funktion zur automatischen Vervollständigung verweigert eine GET-Anforderung für jede Taste bis feuern.

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

Stattdessen sendet er die erste und die dritte und verfehlt das zweite, mir die falschen Ergebnisse geben für ‚ar‘: - / Ich habe meine Cache gelöscht und Sitzungen, aber es sieht aus wie eine Art von Caching noch los ist. AFAIK Ich habe kein proxying los und ich bin Shift-Auffrischen jedes Mal. Es sieht dann wahrscheinlich, dass dieses Verhalten von jQuery.autocomplete selbst.

So sind meine Fragen ...

A) scheint dies wahrscheinlich? das heißt ist es ein Merkmal, oder vielleicht ein Fehler?

B) Wenn dies der Fall ist es eine saubere Art und Weise um ihn herum? ...

C) Wenn nicht, welche die automatische Vervollständigung würden Sie stattdessen?

Natürlich D) Nein, Sie verwenden es nur falsch Duschen Sie ist immer eine Möglichkeit, und zwar die, die ich auf dieser Straße hinunter verbrachte Zeit lieber mit - vorausgesetzt, es kommt mit einem Link zu dem docs ich versagt habe zu finden / lesen!

Cheers,

Roger:)

War es hilfreich?

Lösung

Ich frage mich, warum cacheLength nicht funktioniert, aber auch mit der automatischen Vervollständigung Mühe hatte. IMHO gibt es Fehler in ihm. Doch in der Liste der Optionen , gibt es eine matchSubset Sie auf false gesetzt könnte.

EDIT: irgendwo um die Linie 335 ist eine Funktion „Anforderung“ genannt. Sie könnten einige Debug-Meldungen, um es hinzuzufügen, um zu sehen, was passiert: (Anmerkung: Sie müssen Firebug installiert oder „Konsole“ wird unbekannt)

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“ kann einfach in der Funktion verwendet werden, können Sie / set als Optionen anhängen. Ich habe diese, den Cache zu löschen, wenn mehr Daten im Backend sein könnte:

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

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

Andere Tipps

Ich habe das gleiche Problem. Caching funktioniert nicht, obwohl ich die Option cacheLength auf 1 gesetzt haben

Mit Ihrer Lösung der flushCache Funktion nach jedem gedruckten Begriff nennt es funktioniert. Ich konnte das nicht verwenden:

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

da 'i' wurde beispiel 1 nach Filterung aber 'this.max' noch 25 wie die Original-Backend-Abfrage in Folge 25 Zeilen zurückgegeben.

Doch , dieser Bug ONLY wird angezeigt, wenn Wörter eingeben, dass die schwedische Zeichen 'a', 'ä' oder 'ö' enthalten. Also vielleicht das Einlösen funktioniert wie erwartet, aber nicht mit diesen Sonderzeichen.

Wie auch immer. die Lösung war für mich immer die flushCache Kontrolle in der FORMAT () Funktion aufrufen:

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

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

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

Hoffe, dass dies jemand hilft und wenn jemand die gleichen Probleme mit Sonderzeichen, die Sie eine Antwort senden.

Haben offensichtlich gekommen, um diese 18 Monate, aber

  

cacheLength: 0

in den Optionen für mich gearbeitet. Vielleicht neueste Version hat den Fehler behoben?

Das funktioniert für mich.

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;

Es gibt eine Option Subset Anpassung deaktivieren z.

$("#query").autocomplete(
    url,
    {
        matchSubset: false
    }
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top