ajax会增加每次点击的响应次数

时间:2014-07-13 16:37:52

标签: javascript php jquery ajax

我有简单的ajax请求(它只是发送表单),当我点击按钮时会调用它。问题是,当我点击登录并且它失败了,php确实回应了#34; FAIL"当我再次点击它然后php"回声"它会发生两次,然后是三次等。直到我刷新页面然后才会出现#34;计数器"复位。 它在$(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就会回显"用户名已经被采取"
  4. 现在问题就在于此。如果用户想要使用其他用户名,他会点击"注册"和用户填充的数据是好的,PHP确实回应"用户创建"然后"用户名已经采取"。这是因为ajax发送表单两次。如果用户再次填写错误,那么他就会得到#34; User Created"和2x"用户名已经采取"并且它一遍又一遍地重复,直到他刷新页面。

3 个答案:

答案 0 :(得分:1)

您多次绑定到提交事件。 之前

frm.submit() 

使用:

frm.unbind("submit");

答案 1 :(得分:0)

如果您的点击处理程序多次触发,则它会多次绑定到点击事件。您不会显示代码是如何包含在页面中的。要修复它,您需要对其进行设计,以使点击处理程序仅绑定一次。

如果您只在绑定一次时遇到问题,可以在再次绑定点击处理程序之前尝试使用.unbind()取消绑定任何现有事件。

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

答案 2 :(得分:0)

更好的解决方案是

.one()

$(".foo").one('click',function() {
    //your code
});