Intereting Posts
Как я могу сначала отобразить последнее загруженное изображение? (PHP + CSS) Что это значит, когда var_dump сообщает о неправильной длине строки? Запрос активной записи Codeigniter занимает слишком много времени для загрузки данных из базы данных Не удается получить attr id с jquery Как динамически управлять ролями | разрешениями в Symfony2: ограничить функции динамическими ролями Magento: автоматически создавайте CSV-файл для каждого заказа Обнаруживать, разрешены ли cookie в PHP Как получить статус выполнения функции копирования в PHP? Как добавить запятые к номерам в PHP Как работают миграции Laravel? Нужна помощь с SQL для ранжирования результатов поиска JQuery UI не работает должным образом для некоторых слов как удалить все файлы cookie моего сайта в php используя php для загрузки файлов, не работая над большими файлами? PHP вызывает статическое обходное решение для PHP 5.2

ajax увеличивает количество ответов при каждом нажатии

У меня есть простой запрос ajax (он просто отправляет форму), и он вызывается, когда я нажимаю кнопку. Проблема заключается в том, что когда я нажимаю логин и он не работает, php делает эхо «FAIL», и когда я нажимаю его снова, php «эхо» его два раза, затем три раза и т. Д. Это происходит, пока я не обновляю страницы, а затем «счетчик» сбрасывает , Он находится внутри $ (document) .ready () и использует POST. Мой код:

РЕДАКТИРОВАТЬ № 1 «ИЗМЕНЕНИЕ КОДА»

$('#register').click(function (event) { if (true) { var frm = $('#registerForm'); alert('debug1'); //DOESN'T REPEAT frm.submit(function (ev) // THIS FUNCTION REPEATS, DONT KNOW WHY. { alert('debug2'); //DOES REPEAT $.ajax( { type: frm.attr('method'), url: frm.attr('action'), data: frm.serialize(), success: function (text) { $("#reg_dialog").dialog({ hide:{effect:"drop",duration: 1000}}).dialog('close'); $("#info").html(text).fadeIn(400).delay(2500).fadeOut(500,function(){ if(text!=="User Created"){ location.reload(); // THIS ONE RESETS "THE COUNTER" AS I SAID BEFORE, BUT I DONT WANT TO RELOAD WHOLE PAGE }}) } }); ev.preventDefault(); return false; }); } 

РЕДАКТИРОВАТЬ № 2 (пояснение кода)

Как я хочу, чтобы это работало.

  1. Пользователь заполняет форму (это работает)
  2. Пользователь нажимает кнопку «Зарегистрироваться», php делает код базы данных (если все заполнено правильно, пользователь создан)
  3. Если есть ошибка, подобная имени пользователя, принятому php, echo «Имя пользователя уже выполнено»,
  4. Теперь вот проблема. Если пользователь хочет использовать другое имя пользователя, и он нажимает «Зарегистрироваться», а заполненные пользователем данные в порядке, php делает echo «Пользователь создан», а затем «Имя пользователя уже выполнено». Это связано с тем, что ajax отправляет форму два раза. Если пользователь снова заполнил его неправильно, а затем сразу же получил «User Created» и 2x «Username уже занял», и он повторяется снова и снова, пока он не обновит страницу.

Вы привязываетесь к событию «Отправить» несколько раз. До

 frm.submit() 

использовать:

 frm.unbind("submit"); 

Если ваш обработчик кликов срабатывает несколько раз, он привязывается к событию клика более одного раза. Вы не показываете, как код будет включен на страницу. Чтобы исправить это, вам нужно его спроектировать, чтобы обработчик кликов связывался только один раз.

Если вам не удается связать его только один раз, вы можете попробовать использовать .unbind (), чтобы отменить все существующие события, прежде чем снова связывать обработчик кликов.

 $('#register').unbind('click'); // this does the unbind $('#register').click(function (event) { // the rest of your code etc...