Удаленный доступ Typeahead.js работает, но предварительная выборка не работает

Я использую typeahead.js 0.10.5 в своем веб-приложении. По какой-то странной причине получение предложений в реальном времени через удаленную работу работает, а предварительная выборка не работает. Здесь происходит что-то неочевидное и странное. Согласно консоли разработчика и сетевому монитору Chrome, он даже не выполняет запрос при загрузке страницы. Конечно, он делает запрос, когда я начинаю печатать.

Это действительно меня в тупик - что я делаю неправильно здесь?

    // Instantiate the Bloodhound suggestion engine
    var tags = new Bloodhound({
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
      queryTokenizer: Bloodhound.tokenizers.whitespace,
      remote: {
        url: '/tags/tags/search.json?q=%QUERY',
        filter: function (taglist) {
            // Map the remote source JSON array to a JavaScript object array
            return $.map(taglist, function (tag) {
                console.log(tag);
                return {
                    value: tag.tag
                };
            });
        }
      },
      prefetch: {
        url: '/tags/tags/search.json?q=',
        filter: function (taglist) {
            // Map the remote source JSON array to a JavaScript object array
            return $.map(taglist, function (tag) {
                console.log(tag);
                return {
                    value: tag.tag
                };
            });
        },      
      }
    });

    // Initialize the Bloodhound suggestion engine
    tags.initialize();

    // Instantiate the Typeahead UI
    $('#search-tags').typeahead(null, {
        displayKey: 'value',
        source: tags.ttAdapter(),
        hint: true,
        highlight: true
    });

person caitlin    schedule 05.02.2015    source источник
comment
Попробуйте удалить записи из локального хранилища вашего браузера и начать заново.   -  person mdarwi    schedule 06.02.2015
comment
Да, я пытался использовать Chrome для удаления недавних действий, и это не помогло, но после ручного удаления ключей из локального хранилища это сработало. Опубликуйте это как ответ, и я отмечу его как правильный.   -  person caitlin    schedule 06.02.2015


Ответы (2)


Попробуйте удалить записи из локального хранилища вашего браузера и начать заново.

person mdarwi    schedule 05.02.2015

Объект Bloodhound по умолчанию кэширует предварительно извлеченные данные в локальном хранилище браузера, назначает им TTL (время жизни) 1 день и не проверяет их повторно, пока не истечет TTL. Значения по умолчанию можно изменить, установив «cache: false» и/или «ttl: 1000» (миллисекунды) при инициализации объекта Bloodhound.

Предварительная выборка связана с кэшированием, но немного отличается от нее тем, что на предварительно извлеченные данные не распространяются заголовки Cache-Control, которые отправляет сервер. Он также находится в LocalStorage, а не в кеше браузера (поэтому жесткая перезагрузка или очистка кеша не вызывают его повторную загрузку).

Удаленно извлеченные файлы, с другой стороны, повторно проверяются в зависимости от заголовков Cache-Control. Таким образом, браузер может кэшировать их, если сервер позволяет это. Однако они хранятся в кеше, а не в LocalStorage.

В LocalStorage существует ограничение пространства для каждого домена (см. Каково размер значений localStorage?), поэтому большие предварительные выборки завершатся ошибкой, хотя я не знаю, корректно ли завершится ввод текста (т. е. использует данные, хотя и не может их сохранить).

person Jaredo Mills    schedule 12.04.2017