防止重复提交时,怎么使前面的请求能够返回?

berg369 2013-11-18 11:50:43
用token方式防止重复提交,在表单页生成一个token放在隐藏域并记入session,提交时,判断该域与session中一致则继续执行,否则中止,重复提交经常是快速点多次提交按钮,这生成了多次请求,第一个请求能够正确保存,第二个中止,但第一个请求保存后的处理可能是返回json数据,或者重定向到另一个页面,但是有重复提交的情况下,第一个请求似乎被第二个覆盖了,由于第二个请求中止了,页面却报错,请问这怎么解决?

我希望第一个请求能够返回正确结果,重复提交的请求仅仅中止,不要影响页面输出。
...全文
271 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdgdf566 2013-11-18
  • 打赏
  • 举报
回复
前端解决。按钮点击后变成不可用的。
小丑哥_V5 2013-11-18
  • 打赏
  • 举报
回复
我觉得如果是会重新定向就没必要加载token,如果是ajax返回的,就在后台保存成功后清空token,或者是保存失败,则需要重新生成一个token令牌返回到页面,重新赋值到页面,大概如此流程才够严谨
binecy 2013-11-18
  • 打赏
  • 举报
回复
我也觉得前端处理比方便
lcmrose 2013-11-18
  • 打赏
  • 举报
回复
碰到总是手抽肋的用户是有点蛋疼
lcmrose 2013-11-18
  • 打赏
  • 举报
回复
这个可以在前端用JS变量,提交时即检查JS变量值,符合即继续提交,否则直接return false
berg369 2013-11-18
  • 打赏
  • 举报
回复
但是token这种防止重复提交机制好象是strus创造的,大吹特吹的,就这么没法用吗?
小丑哥_V5 2013-11-18
  • 打赏
  • 举报
回复
引用 7 楼 berg369 的回复:
[quote=引用 1 楼 shadowsick 的回复:] 我觉得如果是会重新定向就没必要加载token,如果是ajax返回的,就在后台保存成功后清空token,或者是保存失败,则需要重新生成一个token令牌返回到页面,重新赋值到页面,大概如此流程才够严谨
如果采用js变灰或显示处理中...等方式,token这种后台机制就没有必要了吧?因为这种机制反而会造成数据无法返回而报错,或者ajax返回不了新token造成无法再次提交[/quote] 你可以说没必要,也可以做有必要咯,必要时,双重保险才是王道,如果数据的比较严格的话
驿站向北 2013-11-18
  • 打赏
  • 举报
回复
java菜鸟一枚,受教了!
berg369 2013-11-18
  • 打赏
  • 举报
回复
引用 1 楼 shadowsick 的回复:
我觉得如果是会重新定向就没必要加载token,如果是ajax返回的,就在后台保存成功后清空token,或者是保存失败,则需要重新生成一个token令牌返回到页面,重新赋值到页面,大概如此流程才够严谨
如果采用js变灰或显示处理中...等方式,token这种后台机制就没有必要了吧?因为这种机制反而会造成数据无法返回而报错,或者ajax返回不了新token造成无法再次提交
sliwey 2013-11-18
  • 打赏
  • 举报
回复
还有一种就是设置标记 只有true时才提交 提交后设置为false 这个跟设置按钮disabled 类似
sliwey 2013-11-18
  • 打赏
  • 举报
回复
提交后设置按钮不可用 或者 提交后设置input框为空 前提是提交前有判空不提交的逻辑
小丑哥_V5 2013-11-18
  • 打赏
  • 举报
回复
引用 3 楼 berg369 的回复:
[quote=引用 1 楼 shadowsick 的回复:] 我觉得如果是会重新定向就没必要加载token,如果是ajax返回的,就在后台保存成功后清空token,或者是保存失败,则需要重新生成一个token令牌返回到页面,重新赋值到页面,大概如此流程才够严谨
现在就是按这种严谨流程做的,但是当快速按两次提交按钮时,产生了两个请求,第一个请求能够执行,但由于第二个请求的存在,第一个请求无法返回浏览器,无法执行重定向,也无法执行重新生成的token的重新赋值,第二个请求因重复而中止,向页面返回了错误信息。 这样尽管防止了重复提交,但是却出错了,难道只能用前台让按钮失效的方法吗?我的程序中用了过滤器等,是否是我的程序有问题?能否只让浏览器与服务器同一时刻只有一个请求? [/quote] 一般来说,严谨的都是前端的按钮需要变灰,或者加入pending判断,如果上一个请求没有结束则不能alert正在处理中,这种方式只能用在ajax提交的情况吧,比较好用
berg369 2013-11-18
  • 打赏
  • 举报
回复
引用 1 楼 shadowsick 的回复:
我觉得如果是会重新定向就没必要加载token,如果是ajax返回的,就在后台保存成功后清空token,或者是保存失败,则需要重新生成一个token令牌返回到页面,重新赋值到页面,大概如此流程才够严谨
现在就是按这种严谨流程做的,但是当快速按两次提交按钮时,产生了两个请求,第一个请求能够执行,但由于第二个请求的存在,第一个请求无法返回浏览器,无法执行重定向,也无法执行重新生成的token的重新赋值,第二个请求因重复而中止,向页面返回了错误信息。 这样尽管防止了重复提交,但是却出错了,难道只能用前台让按钮失效的方法吗?我的程序中用了过滤器等,是否是我的程序有问题?能否只让浏览器与服务器同一时刻只有一个请求?

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧