Question

J'utilise jQuery.autocomplete (1.02) sur ma boîte de recherche et je veux exacte chaîne et la correspondance sous-chaîne. Je ne me soucie pas (encore!) À propos de la charge de base de données, je suis heureux pour à déclencher une requête chaque combinaison de touches et de contourner la mise en cache entièrement -. Je ne veux rien manquer

A cette fin, je l'ai essayé de placer cacheLength = 1 , le minimum autorisé, mais la fonction de saisie semi-automatique refuse de déclencher une requête GET pour chaque touche jusqu'à.

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

, il envoie lieu le premier et le troisième et le second manque, me donner les mauvais résultats pour « ar »: - / J'ai éclairci ma cache et les sessions, mais il ressemble à une sorte de mise en cache est toujours en cours. Autant que je sache, je n'ai pas mandatement passe et je suis changement rafraîchissant à chaque fois. Il semble donc probable que ce comportement est de jQuery.autocomplete lui-même.

Mes questions sont ...

A) Est-ce que semble probable? à savoir est une fonction, ou peut-être un bug?

B) Si oui est-il un moyen propre autour d'elle? ...

C) Dans le cas contraire, ce que autocomplete utiliseriez-vous à la place?

Naturellement D) Non, vous êtes juste à l'utiliser vous les douches vaginales mal est toujours une possibilité, et même celui que je préfère avoir passé du temps d'aller sur cette route - en supposant qu'il est livré avec un lien vers la documentation que j'ai pas réussi à trouver / lire!

Cheers,

Roger:)

Était-ce utile?

La solution

Je me demande pourquoi cacheLength ne fonctionne pas, mais avait du mal avec autocomplete aussi. À mon humble avis, il y a des erreurs qu'il contient. Cependant, dans le d'options , il y a un matchSubset vous pouvez définir à false.

EDIT: quelque part autour de la ligne 335 est une fonction appelée « demande ». Vous pouvez ajouter des messages de débogage, pour voir ce qui se passe: (note: vous avez besoin Firebug installé ou « console » sera inconnu)

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 » peut facilement être utilisé dans la fonction que vous pouvez attacher / set en option. J'ai utilisé ce, pour effacer le cache, s'il pourrait y avoir plus de données dans le back-end:

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

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

Autres conseils

Je suis le même problème. Mise en cache ne fonctionne pas bien que j'ai mis l'option cacheLength à 1.

Avec votre solution pour appeler la fonction flushCache après chaque terme imprimé cela fonctionne. Je ne pouvais pas utiliser le:

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

puisque « i » est par exemple 1 mais après affinement « this.max » encore 25 que la requête d'arrière-plan initial a donné lieu à 25 retourné lignes.

Cependant , ce bug seulement apparaît en tapant les mots qui contiennent les caractères suédois å ', 'A' ou 'ö'. Alors peut-être l'encaissement fonctionne comme prévu, mais pas avec ces caractères spéciaux.

Quoi qu'il en soit. la solution pour moi était d'appeler toujours le contrôle flushCache dans la fonction formatItem ():

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

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

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

Espérons que cela aide quelqu'un et si quelqu'un a les mêmes problèmes avec des caractères spéciaux s'il vous plaît poster une réponse.

ont évidemment venir à ce 18 mois, mais

  

cacheLength: 0

dans les options a fonctionné pour moi. Donc, dernière version a peut-être résolu le bug?

Cela a fonctionné pour moi.

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;

Il existe une option pour désactiver sous-ensemble correspondant par exemple.

$("#query").autocomplete(
    url,
    {
        matchSubset: false
    }
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top