Вопрос

Я использую jQuery.autocomplete(1.02) в моем окне поиска, и я хочу точный соответствие строки и подстроки.Меня (пока!) не волнует загрузка базы данных, я рад, что она запускает запрос при каждом нажатии клавиши и полностью обходит кеширование - я просто не хочу, чтобы что-то было пропущено.

С этой целью я попробовал установить кэшдлина=1, разрешенный минимум, но функция автозаполнения отказывается запускать запрос GET для каждого нажатия клавиши.

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

Вместо этого он отправляет первое и третье и пропускает второе, давая мне неверные результаты для 'ar' :-/ Я очистил свой кеш и сеансы, но похоже, что какое-то кеширование все еще продолжается.AFAIK У меня нет проксирования, и я каждый раз обновляю смену.Похоже, что такое поведение связано с самим jQuery.autocomplete.

Итак, мои вопросы...

А) Это кажется вероятным?то естьэто особенность или может баг?

Б) Если да, то есть ли чистый способ обойти это?...

С) Если нет, то какое автозаполнение вы бы использовали вместо этого?

Естественно Г) Нет, ты просто неправильно его используешь, придурок! это всегда возможно, и я бы предпочел потратить время на этот путь - при условии, что он содержит ссылку на документы, которые мне не удалось найти/прочитать!

Ваше здоровье,

Роджер :)

Это было полезно?

Решение

интересно, почему длина кэша не работает, но тоже были проблемы с автозаполнением.ИМХО, там есть ошибки.Однако в список опций, Eсть matchSubset вы можете установить значение false.

РЕДАКТИРОВАТЬ:где-то в строке 335 есть функция под названием «запрос».Вы можете добавить к нему несколько отладочных сообщений, чтобы посмотреть, что произойдет:(примечание:тебе нужно поджигатель установлен или "консоль" будет неизвестно)

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» можно легко использовать в функции, которую вы можете прикрепить/установить в качестве опций.Я использовал это, чтобы очистить кеш, если в серверной части может быть больше данных:

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

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

Другие советы

У меня та же проблема.Кэширование не работает, хотя я установил для параметра «cacheLength» значение 1.

С вашим решением вызывать функциюlushCache после каждого напечатанного термина это работает.Я не мог использовать:

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

поскольку «i» было, например, 1 после фильтрации, но «this.max» по-прежнему 25, поскольку исходный внутренний запрос привел к возврату 25 строк.

Однако, эта ошибка ТОЛЬКО появляется при вводе слов, содержащих шведские символы «å», «ä» или «ö».Так что, возможно, обналичивание работает так, как ожидалось, но не с этими специальными символами.

В любом случае.для меня решением было всегда вызывать элемент управленияlushCache в функции formatItem():

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

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

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

Надеюсь, это кому-то поможет, и если у кого-то такие же проблемы со специальными символами, оставьте ответ.

Очевидно, пришли к этому через 18 месяцев, но

длина кэша:0

в опциях у меня сработало.Так может быть, в последней версии ошибка исправлена?

Это сработало для меня.

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;

Существует возможность отключить сопоставление подмножества, например.

$("#query").autocomplete(
    url,
    {
        matchSubset: false
    }
)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top