首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ajax每次单击都会增加响应数。

ajax每次单击都会增加响应数。
EN

Stack Overflow用户
提问于 2014-07-13 16:37:52
回答 3查看 654关注 0票数 0

我有一个简单的ajax请求(它只是发送表单),当我单击按钮时会调用它。问题是,当我点击登录而失败时,php会回显“failed”,当我再次单击它时,php会“回显”它两次,然后三次等等,直到我刷新页面,然后重置“计数器”。它位于$(document).ready()内部,它使用POST。我的代码:

EDIT#1“代码编辑”

代码语言:javascript
运行
复制
$('#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发送表单两次。如果用户一次又一次地填错了,他就会得到“用户创建”和2x“用户名已经被使用”,并且这种情况一次又一次地发生,直到他刷新页面。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-13 17:22:16

您要多次绑定到Submit事件。在此之前

代码语言:javascript
运行
复制
frm.submit() 

用途:

代码语言:javascript
运行
复制
frm.unbind("submit");
票数 2
EN

Stack Overflow用户

发布于 2014-07-13 17:04:01

如果单击处理程序多次触发,则它将多次绑定到单击事件。您没有显示代码是如何包含在页面中的。要修复它,您需要设计它,以便单击处理程序只绑定一次。

如果只有一次绑定有问题,可以尝试在再次绑定单击处理程序之前使用.unbind()解除任何现有事件的绑定。

代码语言:javascript
运行
复制
$('#register').unbind('click');
// this does the unbind
$('#register').click(function (event)
{
    // the rest of your code etc... 
票数 0
EN

Stack Overflow用户

发布于 2021-03-09 01:00:27

一个更好的解决办法是

.one()

代码语言:javascript
运行
复制
$(".foo").one('click',function() {
    //your code
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24724911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档