Проблема с кол-вом запросов и кликов при ajax

yeaahhh

Старатель
Регистрация
8 Май 2008
Сообщения
278
Реакции
11
Друзья. В нескольких местах сайта стоит асинхронная передача данных. Возьмём актуальный пример - Удаление сообщения и дальнейший вычет 1 из общего кол-ва сообщений пользователя.

Проблема: у некоторых пользователей чешутся руки(иногда такое бывает из-за небольших задержек в выполнении ajax) и они по несколько раз тыкают на удалить. В связи с этим скрипт выполняется 2 раза.. Соответственно, в скрипте-обработчике вычитается 2 сообщения из общего кол-ва.. При 3 кликах - 3..
Как можно победить данную проблему? Есть ли какие-то способы?

Пока в голову пришло только 1 - после клика сразу же скрывать кнопку, по которой кликает человек..

Буду признателен за помощь.. Заранее спасибо!
 
Например, можно в переменной хранить статус отправки запроса.

Т.е. при отправке запроса ставить его в true, при получении результата в false.
При отправке новых запросов - проверять статус на true, и такие не отправлять.
 
Если вы про файл-обработчик, то так и делаю. Но почему-то всёравно несколько запросов делает..
 
генерация кода в сессии до и после клика и сравнение этих двух кодов. Почитайте тут последние сообщения, я как раз примерно такое пытаюсь у себя сделать: Для просмотра ссылки Войди или Зарегистрируйся может, поможет =)
 
Записывать в файле обработчике в сессию какое-нить значение (например id удаляемой записи) и при каждом выполнении скрипта проверять эту сессию на пустоту.
 
если кнопка объявлена через button то вызывать метод disable (пример для jquery: $("#button").attr(disable , true) а когда прийдет ответ $("#button").attr(disable , false)). А если не через button то попробуй перекрывать кнопку прозрачным дивом у которого z-index больше
 
в обработчике ajax использовать глобальный статус, определенный через window.aStatus (или просто переменную без слова var) или другую глобальную переменную, добавив к ней, например, айди сообщения в название, можно аттачить дополнительный атрибут к ссылке/кнопке со значением. Устанавливать в true в случае первого запроса, и в false в случае обработки запроса, при возвращении результата ajax в функции - обработчике устанавливать в false обратно, проверять статус. Можно просто вести глобальный массив айди обработанных сообщений, и проверять на наличие в нем данных. Если кнопка является ссылкой (html элементом а), а значение атрибута href используется, как адрес ajax запроса, сбрасывать ее на время выполнения запроса, хранить оригинальную ссылку, например, в data-href. В случае с input type button, button и т.п. использовать атрибут disabled. А также в скрипте - обработчике проверять существование самого сообщения.

Но, лучше всего обработать ситуацию со стороны сервера:

В скрипте - обработчике ajax запроса сделать не -1, а подсчитать актуальным запросом количество сообщений в нужной таблице. Это вернее всего поможет решить проблему. И записать обновленное значение.
 
Назад
Сверху