У меня есть простой запрос 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 (пояснение кода)
Как я хочу, чтобы это работало.
Вы привязываетесь к событию «Отправить» несколько раз. До
frm.submit()
использовать:
frm.unbind("submit");
Если ваш обработчик кликов срабатывает несколько раз, он привязывается к событию клика более одного раза. Вы не показываете, как код будет включен на страницу. Чтобы исправить это, вам нужно его спроектировать, чтобы обработчик кликов связывался только один раз.
Если вам не удается связать его только один раз, вы можете попробовать использовать .unbind (), чтобы отменить все существующие события, прежде чем снова связывать обработчик кликов.
$('#register').unbind('click'); // this does the unbind $('#register').click(function (event) { // the rest of your code etc...