Буферизованные / отложенные запросы Ajax / нажатия клавиш с использованием JavaScript и JQuery Datatables - PullRequest
3 голосов
/ 05 сентября 2011

В настоящее время я создаю прототип корпоративного веб-приложения, которое будет содержать экран быстрого поиска. Этот экран использует JQuery и Datatables для предоставления табличного представления результатов поиска. Поиск выполняется на основе совпадений со строкой, введенной в текстовое поле. При каждом нажатии клавиши новый запрос AJAX отправляется обратно сервлету, поиск выполняется (по большой базе данных) и результаты возвращаются через JSON для обновления таблицы.

Поиск в базе данных является дорогостоящей операцией. Много раз, когда пользователь печатает, скажем, имя, он вводит несколько букв в быстрой последовательности. Это приведет к тому, что в бэкэнде будут запущены несколько поисков, иногда без необходимости.

Мне было интересно, есть ли способ ловко буферизовать этот запрос. Например, если пользователь печатает «Jonathan», не отправляйте запрос для J, Jo, Jona, Jonath, ... если они все введены в течение определенного промежутка времени, и отправляйте запрос только при наличии достаточный пробел в наборе текста, т. е. когда печатается буква n в конце.

Я знаю, что это будет стоить небольшой задержки, но это может быть достойным компромиссом.

Как вы думаете, это имеет смысл? Существует ли существующий шаблон / библиотека для таких операций? Это вызывает проблемы с юзабилити, о которых я не задумывался?

Очень ценю ваше мнение!

Ответы [ 2 ]

6 голосов
/ 05 сентября 2011

На всякий случай, если кто-то смотрит на подобную проблему: после комментария Спайка я проверил плагины datatables, и есть кое-что, что делает именно то, что я хотел выше: см. fnSetFilteringDelay

2 голосов
/ 05 сентября 2011

Вы можете использовать функцию автозаполнения фреймворка jquery-ui, которая имеет опцию задержки, которая делает именно то, что вы ищете.

http://jqueryui.com/demos/autocomplete/#option-delay

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...