Здравствуйте!
Хочу реализовать динамический поиск данных.
Т.е. когда вводишь в строке поиска текст, после каждого нажатия клавиши создается ajax-запрос, который в свою очередь обращается к БД и вытягивает данные.
Так то алгоритм не сложный, просто вешаешь на event.keyUp или event.keyPress код запроса и все вроде бы нормально.
Проблема наступает, когда начинаешь вводить данные очень быстро. В какой то момент, запрос видимо не успевает прогрузиться и идет сбой.
Делаю запрос в javaScript фреймворке extjs и у меня это выглядит примерно так:
По нажатию на клавишу проверяется, что длина введенной строки больше трех и нажата буква или цифра
if (search_value.length > 3 && event.keyCode > 46 && event.keyCode < 91) {
store2.proxy.api.read = '/isc/get_store2/?value='+search_value;
store2.loadPage(1);
}
При аккуратном нажатии все работает хорошо, но если набрать очень быстро, то видимо где-то что-то сбоит и в консоли выдается ошибка Uncaught TypeError: Cannot read property 'internalId' of undefined
Понятно, что это конкретно extjs ошибка, которая говорит о том, что не получается загрузить store2, но суть в том, что похоже просто не успевает отработать предыдущий запрос и на него накладывается новый.
В связи с этим вопрос, как можно заблокировать выполнение запроса к БД, если в данный момент не завершен предыдущий запрос. Ну или в целом какие есть механизмы динамического поиска, которые могут решить такого рода проблему?