Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

闲扯「重复提交」

  今天和同事出去吃饭的时候,由于大家都很能吃,结果就叫服务员又上了米饭。可是等了好久服务员都没给上,于是我们又把同样的需求告诉了另一个服务员。那么问题来了,服务员之间是缺乏沟通的,要是两个服务员同时都带来了米饭可怎么办呢?
  平时写表单提交的时候也经常会遇到这个坑。如果提交按钮没有做特殊处理,被点击多次的话请求就可能重复提交。最普遍的解决办法是在点击提交按钮后将其冻结,仔细想想其实这是很差的用户体验。要是吃饭的时候向服务员要米饭等了好久都没上,又叫不动别的服务员,这肯定是要差评的!提交请求卡住一直完成不了,用户又无法再次点击提交按钮,这也是同样的差评!
  其实之前的一篇「Web 中的事务与撤销」中就已经介绍过这个问题,只是现在我们需要的并不是「撤销」,而是「催促」。就像我们会催服务员上菜一样,我们的用户也希望有「催促」表单提交的功能。但考虑到重复提交,其实我们和餐厅遇到了同样的问题。
  也许这个问题对于餐厅而言是非常棘手的,但对于我们而言就比较容易,因为我们不需要考虑服务员的感受。给每个表单提交事务添加一个唯一 ID,服务器通过这个 ID 过滤掉重复的提交。这样就可以将一个原本非幂等的操作转换为幂等,解决了重复提交的问题。
  最终我们可以给提交按钮点击后添加一个倒计时,若干秒后可以发起「催促」。不过我最近没空写 DEMO,这里就不贴代码了,请自动脑补 :joy:
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^