Всем привет!
Возникла проблема: когда пользователи кликают на кнопку 2 раза и соответственно на сервер отправляются 2 одинаковых ajax-запроса. Чтобы это дело пофиксить вижу пока два варианта:
1) Помечать как то у элемента статус выполнения (например добавить класс) и по условию проверять на его наличие чтобы второй раз не отправлялось.
2) Выставить async: false
Пока что выбрал второй вариант (код чище). Но стало интересно какие могут возникнуть подводные камни и вообще как делать правильнее с точки зрения JS одной из сильных сторон которого как раз таки является асинхронность.
Первый вариант. У кнопок добавлять атрибут disabled, а ссылки и все остальное помечать классом, например disabled. После успешного выполнения запроса убирать блокировку.
Синхронные запросы подвешивают интерфейс, делают его менее отзывчивым. В некоторых случаях это незаметно. Но стоит серверу задуматься на пару секунд при обработке синхронного ajax-запроса - уже будет не очень хорошо.
В некоторых фреймворках (например ExtJS) сейчас вообще нет синхронных ajax-запросов.
Я лично использую первый вариант. В переменной храниться запрос (не весь, а управляющая команда), по удачному выполнению переменная сбрасывается. Если переменная не пуста, то запросы не отправляются.