Вообщем, решил написать свой фильтр для сайта. Фильтр представляет собой 4 чек бокса. Реализовывать я его так, при каждом нажатие на любой из чек боксов, с помощью Ajax отправлялась строка из 0 и 1(0 - чек бокс снят, 1 - чек бокс активен). Проблема в том, что все запросы происходят параллельно, и когда быстро меняешь фильтры, то запросы отправляются одновременно, и быстрее выполняется тот, в котором больше нулей, т. е. фильтр из-за этого не всегда работает правильно. Хотелось бы узнать, как лучше реализовать этот механизм и сократить количество Ajax запросов.
Можно при отправке запроса блокировать форму с фильтрами, при этом чтобы пользователю было выдно что она неактивна в это время, при получении ответа снимать блок разумеется.
Или добавить кнопку сабмита после нажатия которой и будут срабатывать фильтры.
нормально делать именно как Дмитрий Гординский подсказывает, в процессе получения данных все управляющие элементы получают статус disabled, или просто обернуть их в общий блок и сделать для блока на время запроса
pointer-events: none;
opacity: 0.7;
, и в success функции аякса снимать эти стили. Тогда визуально блок будет полупрозрачным, подсказывая пользователю что тут ничего не работает, и по отработавшему скрипту все вернется как было в рабочее состояние.
1. народ правильно пишет про debounce - лишние запросы просто не надо отправлять.
2. при смене фильтра перед отправкой очередного запроса надо отменить предыдущий: https://developer.mozilla.org/en-US/docs/Web/API/X...
3. при желании, в ответе можно передавать обратно набор фильтров и не показывать ответ если фильтры не соответствуют текущему состоянию. это на тот редкий случай, когда запрос уже успел докачаться, но не успел обработаться когда юзер поставил галку. (хотя я не уверен насчёт поведения браузеров при отмене запроса - может они и обрабатывают такой случай, даже не представляю как это можно надёжно выяснить)