解决注册登录 用户重复提交

  1. 现有的用户注册登录框, 不论是ajax 还是 表单提交, 用户狂点注册按钮或enter 都会导致当前页面还没有调到注册成功的页面时, 发起两次以上的注册请求。
    不使用遮挡注册按钮的情况下(因为遮挡注册按钮不能屏蔽enter触发的注册请求), 通过js来解决, 有什么好的解决思路?
    现在准备测试下 用个标志变量判断是否已经发起一次请求,请求结束了,才能发起第二个请求。这种方案是否合理
阅读 8.3k
4 个回答

ajax和表单提交解决方法差不多
(1)setTimeout + clearTimeout 连续的点击会把上一次点击清除掉,也就是ajax请求会在最后一次点击后发出去;
(2)disable 按钮;
(3)每次点击都发请求,往回调里加闭包带唯一递增的id,每一次请求回调以后看这个id是不是主函数体里最后一次点击的id,是则调用回调,不是则返回,也就是ajax回数后看这个回调是不是最后一次点击的回调,不是就不操作页面了;

第1,2种请求是做用户疯狂快速点击时防止发大量请求的
第3种是用户不那么频繁的点击,但是每一次点击ajax请求回数时间比较长,也就是第二次请求可能比第一次先回数这种特殊情况的

有一个token机制,最早接触的时候是在struts上。大致是这样的,当请求注册页面的时候,服务器会返回给浏览器正常的页面和一个隐藏的input,它的值是一个服务器生成的字符串。当你点击提交的时候,这个token会被加载到服务器端,服务器一旦得到了这个token,匹配后立即删除服务器上的token。当用户再提交的时候,因为找不到对应的token,所以不会重复的提交用户的信息。你可以利用相似的手法去处理。

新手上路,请多包涵

补充一点,ajax提交的方式可以判断xhr的readyState是否为4而得到是否完成了一次提交,不是4的都return掉

如果你使用jquery ajax form 里面有一个berforsubmit option 参数。你可以在之前做一个登录状态的检查。禁止按钮的给人的体验很差,不建议使用

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏