Typeahead/Bloodhound — использование Jquery Ajax для удаленного доступа вызывает только один запрос на стороне сервера

Мне нужно использовать настройку jquery ajax в удаленном свойстве Bloodhound, поскольку у меня есть страница на стороне сервера, которая принимает только запросы POST. Все работает, но только один раз. Любое последующее изменение текста в поле ввода typehead вызывает функцию фильтра, но не запускает новый запрос на стороне сервера для получения новых данных. Он просто фильтрует данные, полученные в первом запросе. Мне нужно сделать новый запрос, поскольку пользователь удаляет текст и вводит что-то еще.

Я новичок в typehead, и я трачу слишком много времени, пытаясь понять это. Вот мой код.

var users = new Bloodhound({
        datumTokenizer: function (d) {
            return Bloodhound.tokenizers.whitespace(d.value);
        },
        queryTokenizer: Bloodhound.tokenizers.whitespace,
        remote:   {
            url: 'fake.jsp',
            filter: function (users) {
                return $.map(users, function (user) {
                    return {
                        value: user.USER_ID,
                        name: user.DISPLAYNAME
                    };
                });
            },
            ajax: {
                type: 'POST',
                data: {
                    param: function(){
                        return $('#userid').val();
                    }
                },
                context: this
            }
        }
    });
    users.initialize(true);

    $('#userid').typeahead({
          minLength: 3,
          highlight: true
        }, {
          name: 'userslist',
          displayKey: 'name',
          source: users.ttAdapter()
    });

person user3636811    schedule 14.05.2014    source источник
comment
Я смог обойти эту проблему. Требуется для использования метода clearRemoteCache Bloodhound.   -  person user3636811    schedule 14.05.2014
comment
где вы конкретно используете clearRemoteCache()?   -  person sports    schedule 17.06.2014


Ответы (2)


У меня было такое же решение, и я обнаружил, что опция jQuery cache: false; не работает в этой ситуации по какой-либо причине. Вот решение, которое я нашел:

   remote: {
        url: ...
        replace: function(url, query) {
            return url + "#" + query; // used to prevent the data from being cached. New requests aren't made without this (cache: false setting in ajax settings doesn't work)
        }
    }
person Nate    schedule 13.07.2014

попробуй это:

   remote:   {
               url: 'fake.jsp/?' + Math.random(),
   .
   .
   .

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

person Laars Camot    schedule 09.09.2014