Pergunta

Eu estou usando jQuery.autocomplete (1,02) na minha caixa de pesquisa e quero exata string e substring correspondente. Eu não me importo (ainda!) Sobre a carga de banco de dados, eu estou feliz por ele para disparar uma consulta todas as teclas e ignorar o cache inteiramente -. Eu só não quero que nada perdeu

Para este fim eu tenho configuração tentou cacheLength = 1 , o mínimo permitido, mas a função autocomplete se recusa a disparar uma solicitação GET para cada tecla para cima.

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

Em vez disso, ele envia o primeiro eo terceiro e perde o segundo, dando-me os resultados errados para 'ar': - / Eu limpei a cache e sessões, mas parece que algum tipo de cache ainda está em curso. AFAIK Não tenho proxy acontecendo e eu estou cada vez-refrescante mudança. Parece provável, então, que este comportamento é de si jQuery.autocomplete.

Então, minhas perguntas são ...

A) Isto parece provável? ou seja, é uma característica, ou talvez um bug?

B) Se assim for, há uma maneira limpa em torno dele? ...

C) Se não, o autocomplete você usaria em vez disso?

Naturalmente D) Não, você está apenas usando-lo incorretamente você douche é sempre uma possibilidade, e na verdade o que eu prefiro ter tempo gasto indo por este caminho - supondo que ele vem com um link para os docs Eu não conseguiram localizar / ler!

Cheers,

Roger:)

Foi útil?

Solução

Eu me pergunto por cacheLength não trabalho, mas teve problemas com autocomplete também. IMHO, há erros na mesma. No entanto, na href="http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions" rel="nofollow lista de opções , há um matchSubset você pode definir como falsa.

EDIT: em algum lugar em torno da linha 335 é uma função chamada "pedido". Você pode adicionar algumas mensagens de depuração para ele, para ver o que acontece: (Nota: você precisa firebug instalado ou "console" será desconhecido)

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" pode facilmente ser usado na função você pode anexar / set como opções. Eu usei isso, para limpar o cache, se poderia haver mais dados no backend:

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

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

Outras dicas

Estou tendo o mesmo problema. Cache não funciona apesar de eu ter definido o cacheLength opção de 1.

Com a sua solução para chamar a função flushCache depois de cada termo impresso ele funciona. Eu não poderia usar o:

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

desde 'i' foi por exemplo 1 após a filtragem, mas 'this.max' ainda 25 como a consulta backend originais resultou em 25 linhas retornadas.

No entanto , este bug SOMENTE aparece quando as palavras de digitação que contêm os caracteres sueco 'a', 'a' ou 'o'. Então, talvez a descontar funciona como esperado, mas não com esses caracteres especiais.

De qualquer forma. a solução para mim foi sempre chamar o controle flushCache na função formatItem ():

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

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

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

Espero que isso ajude alguém e se alguém está a ter os mesmos problemas com caracteres especiais, por favor postar uma resposta.

têm, obviamente, vir a este 18 meses sobre, mas

cacheLength: 0

nas opções trabalharam para mim. Então, talvez mais recente lançamento fixou o bug?

Isso funcionou para mim.

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;

Há uma opção para desativar a correspondência subconjunto por exemplo.

$("#query").autocomplete(
    url,
    {
        matchSubset: false
    }
)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top