@Saharman

Управление Ajax-запросами?

Вообщем, решил написать свой фильтр для сайта. Фильтр представляет собой 4 чек бокса. Реализовывать я его так, при каждом нажатие на любой из чек боксов, с помощью Ajax отправлялась строка из 0 и 1(0 - чек бокс снят, 1 - чек бокс активен). Проблема в том, что все запросы происходят параллельно, и когда быстро меняешь фильтры, то запросы отправляются одновременно, и быстрее выполняется тот, в котором больше нулей, т. е. фильтр из-за этого не всегда работает правильно. Хотелось бы узнать, как лучше реализовать этот механизм и сократить количество Ajax запросов.
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 6
Можно при отправке запроса блокировать форму с фильтрами, при этом чтобы пользователю было выдно что она неактивна в это время, при получении ответа снимать блок разумеется.

Или добавить кнопку сабмита после нажатия которой и будут срабатывать фильтры.
Ответ написан
Комментировать
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Обрабатывать ответы в коллбэках, тогда скорость нажатий будет не важна.
Либо использовать синхронные запросы, что не айс.
Ответ написан
Комментировать
@iljaGolubev
1. Использовать таймаут между изменением чекбокса и аджакс запросом.
2. во время выполнения аджакс - дизэблить чекбоксы.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
нормально делать именно как Дмитрий Гординский подсказывает, в процессе получения данных все управляющие элементы получают статус disabled, или просто обернуть их в общий блок и сделать для блока на время запроса
pointer-events: none;
opacity: 0.7;
, и в success функции аякса снимать эти стили. Тогда визуально блок будет полупрозрачным, подсказывая пользователю что тут ничего не работает, и по отработавшему скрипту все вернется как было в рабочее состояние.
Ответ написан
Комментировать
@forspamonly2
1. народ правильно пишет про debounce - лишние запросы просто не надо отправлять.
2. при смене фильтра перед отправкой очередного запроса надо отменить предыдущий: https://developer.mozilla.org/en-US/docs/Web/API/X...
3. при желании, в ответе можно передавать обратно набор фильтров и не показывать ответ если фильтры не соответствуют текущему состоянию. это на тот редкий случай, когда запрос уже успел докачаться, но не успел обработаться когда юзер поставил галку. (хотя я не уверен насчёт поведения браузеров при отмене запроса - может они и обрабатывают такой случай, даже не представляю как это можно надёжно выяснить)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы