Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как исключить повторное нажатие кнопки "Submit"?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Hawkmoth
Отправлено: 26 Марта, 2012 - 22:14:58
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Янв. 2012  


Помог: 6 раз(а)




Господа гуру, помогите пожалуйста вот с такой проблемой. Есть форма регистрации с Submit'ом внизу. После нажатия на сабмит данные через аякс улетают на сервер, где обрабатываются скриптом и, если были найдены ошибки - пользователю изящно сообщается об этом через тот же аякс. Если ошибок нет - скрипт выполняется до конца, включая отправку e-maila и редирект на страницу с подтверждением. Проблема в том, что в случае успешного выполнения браузер думает где-то секунд 5-6, а за это время нетерпеливый пользователь умудряется n раз нажать на кнопку с подтверждением, что приводит к понятным вещам. Как запретить пользователю больше одного раза нажимать на 'submit', но при этом чтобы в случае найденных ошибок сабмит становился активным вновь?
 
 Top
LIME
Отправлено: 26 Марта, 2012 - 22:22:23
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




если уж такой медленый обработчик то можно по нажатию до отправки запроса делать кнопку дисаблед
и потом снова разрешать по приходу ответа
подумайте над тем что вместо аjax использовать перезагрузку
если медленый обработчик нафига такой ajax )))
 
 Top
Hawkmoth
Отправлено: 26 Марта, 2012 - 22:30:15
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Янв. 2012  


Помог: 6 раз(а)




Дело в том, что аякс отлично работает в плане предупреждения ошибок - включая проверки на наличие недопустимых символов, совпадение с уже имеющимися в базе логинами и е-майлами и т.п. Пользователю мгновенно выводится соответствующее сообщение.
Но вот если ошибок нет, возникает задержка. И хотелось бы, чтобы во время этой задержки пользователь не мог лишний раз кликнуть на сабмит.
Логика такая - после клика на сабмит кнопка 'disabled', скрипт обработал, и если вернул 'ошибку', снова 'enabled'.
 
 Top
LIME
Отправлено: 26 Марта, 2012 - 22:44:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




jquery?
 
 Top
Hawkmoth
Отправлено: 26 Марта, 2012 - 22:53:06
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Янв. 2012  


Помог: 6 раз(а)




LIME пишет:
jquery?


Ага.

В общем, сделал тривиально, но как раз то, что хотел:
После нажатия на сабмит в js-функции отправки данных на сервер написал
CODE (javascript):
скопировать код в буфер обмена
  1. document.getElementById('submit').disabled=true;

а в функции принятия ошибок от сервера, соответственно:
CODE (javascript):
скопировать код в буфер обмена
  1. document.getElementById('submit').disabled=false;


Всё работает как надо.

(Отредактировано автором: 26 Марта, 2012 - 22:53:45)

 
 Top
LIME
Отправлено: 26 Марта, 2012 - 22:59:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




только если юзер не држдется и обновит страницу или ссылу жмакнет
логика не сломается?
ajax должен быть быстрым
подумайте
вероятно плохо обработчик написан?
может бд оптимизировать?
может в случае отсутсвия ошибки всю страницу отправить на на типа "идет обработка" с рефрешем 5 сек?
хз что но чтото надо делать
 
 Top
Hawkmoth
Отправлено: 26 Марта, 2012 - 23:13:09
Post Id


Посетитель


Покинул форум
Сообщений всего: 329
Дата рег-ции: Янв. 2012  


Помог: 6 раз(а)




Подозреваю, что все беды из-за sendmail.
Там, где нужно отправить письмо со ссылкой активации - скрипт думает.

Но это 5-6 секунд, не больше.
LIME пишет:
может в случае отсутсвия ошибки всю страницу отправить на на типа "идет обработка" с рефрешем 5 сек?
хз что но чтото надо делать

Прикрутил крутящийся "бегунок", типа "обработка идёт".
Думаете, все равно будут жмакать?)
 
 Top
LIME
Отправлено: 26 Марта, 2012 - 23:32:57
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Hawkmoth пишет:
Там, где нужно отправить письмо со ссылкой активации - скрипт думает.
вставте отладку
вывод времени в секундах после каждого действия
найдете узкое место
 
 Top
snikers987
Отправлено: 27 Марта, 2012 - 08:52:17
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Hawkmoth
jQuery
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $("#submit").attr("disabled", "disabled");
  3. $("#submit").removeAttr("disabled");
  4.  

(Отредактировано автором: 27 Марта, 2012 - 08:53:06)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB