Pregunta

estoy usando jQuery.autocompletar (1.02) en mi cuadro de búsqueda y quiero exacto coincidencia de cadenas y subcadenas.No me importa (¡todavía!) la carga de la base de datos, estoy feliz de que active una consulta con cada pulsación de tecla y omita el almacenamiento en caché por completo; simplemente no quiero que se pierda nada.

Para este fin he intentado configurar longitud de caché = 1, el mínimo permitido, pero la función de autocompletar se niega a activar una solicitud GET para cada tecla.

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

En cambio, envía el primero y el tercero y omite el segundo, lo que me da resultados incorrectos para 'ar' :-/ Borré mi caché y mis sesiones, pero parece que todavía hay algún tipo de almacenamiento en caché.AFAIK, no tengo ningún proxy y estoy actualizando turnos cada vez.Entonces parece probable que este comportamiento provenga del propio jQuery.autocomplete.

Entonces mis preguntas son...

A) ¿Parece esto probable?es decir.¿Es una característica o tal vez un error?

B) Si es así, ¿hay una forma limpia de evitarlo?...

C) Si no, ¿qué autocompletar usarías en su lugar?

Naturalmente D) No, ¡solo lo estás usando incorrectamente, idiota! Siempre es una posibilidad y, de hecho, la que preferiría haber dedicado tiempo a seguir este camino, ¡suponiendo que venga con un enlace a los documentos que no pude encontrar/leer!

Salud,

Roger :)

¿Fue útil?

Solución

Me pregunto por qué cacheLength no funciona, pero tuvo problemas con autocompletar también. En mi humilde opinión, hay errores en ella. Sin embargo, en el , hay un matchSubset podría establecer en false.

EDIT: en algún lugar alrededor de la línea 335 es una función llamada "solicitud". Se podría añadir algunos mensajes de depuración a ella, para ver lo que sucede: (nota: se necesita firebug instalado o "consola" será desconocido)

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" puede ser fácilmente utilizado en la función puede adjuntar / set como opciones. He utilizado este, para borrar la caché, si podría haber más datos en el backend:

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

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

Otros consejos

Estoy teniendo el mismo problema. El almacenamiento en caché no funciona aunque yo he dado la opción de cacheLength a 1.

Con su solución de llamar a la función flushCache después de cada término impreso funciona. No podía utilizar el:

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

desde 'i' estaba por ejemplo 1 después de filtrar, pero 'this.max' todavía 25 como la consulta backend originales resultó en 25 filas devueltas.

Sin embargo , este error sólo que aparece al escribir las palabras que contienen los caracteres suecos 'a', 'A' o 'O'. Así que tal vez el cobro funciona como se esperaba, pero no con estos caracteres especiales.

De todos modos. la solución para mí fue llamar siempre el control flushCache en la función formatItem ():

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

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

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

Espero que esto ayude a alguien y si alguien está teniendo los mismos problemas con los caracteres especiales, por favor enviar una respuesta.

obviamente han llegado a esta 18 meses, pero

  

cacheLength: 0

en las opciones trabajó para mí. Así que tal vez última versión ha corregido el error?

Esto funcionó para mí.

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;

Hay una opción para desactivar subconjunto coincidente por ejemplo.

$("#query").autocomplete(
    url,
    {
        matchSubset: false
    }
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top