首页
文章
文库
登录
|
注册
最新
推荐
热门
主题
关注
收藏
反馈
关注公众号
防止同一表单多次提交的办法
来源
本站原创
佚名
一、概述
当处理请求的时间较长时,它可能导致用户多次提交同一表单。这不仅会使应用程序出现问题,而且还会进一步延缓请求处理时间。但是,只要使用一个简单的javascript函数,我们就可以防止用户多次提交同一表单,而且能够在长时间请求处理期间提醒用户。
想象一下这种情形:你在Web商店花了半个小时,最后终于到了付款的页面。你再次检查了购物篮里面的各种商品和合计金额,然后输入信用卡信息并点击“提交”按钮。这时,浏览器上出现了沙漏鼠标指针。你等了10秒、15秒还是没有看到应答。于是,你就再次点击“提交”按钮,开始了下一个15秒的等待——还是没有应答。这时你已经完全失去了耐心,多次重复地点击“提交”按钮。最后,在失望之中,你选择了放弃。
在我看来,对于Web浏览来说,人们愿意等待的时间大约是4秒。如果用户在提交请求之后,4秒之内没有看到任何应答,他们会假定应用程序的某个地方出了问题。你可能已经在许多网站上遇到过这个问题。在一些大型网站上,你可能还看到过“多次提交同一请求只能导致处理延迟”之类的警告。
导致请求处理延迟的原因有很多:
· 网络负荷过重。
· 数据库瓶颈可能延长服务器端的处理时间。
· 等待Web服务器处理的请求数量太多。
如果请求处理延迟是由于上述原因之一造成,重新提交请求只会把事情搞得更糟。一些Web开发者强调说他们在服务器上运行的代码很健壮,即使用户多次提交同一请求,服务器端代码也能够保证只有一个记录会被插入数据库。也许这能够避免出现错误,然而,这是解决问题的最好方法吗?
二、为什么多次请求可能导致问题?
HTTP是一种无状态的协议。无论是Web服务器还是Web客户端,都不会维持会话状态信息。当你点击一个链接或者提交一个表单,浏览器建立了与服务器之间的一个连接,提交请求,读取应答,接着服务器和浏览器都会关闭这个连接。对于每一个请求,浏览器都要建立与服务器的一个新连接;每一个浏览器实例每次只使用一个连接。
因此,如果用户一次又一次地点击“提交”按钮,他们实际上是在:建立与Web服务器的连接,提交请求,然后在不等待服务器回应的情况下立即关闭与服务器的连接。服务器忠实地处理这些重复的请求,但由于客户端已经中断了连接,服务器不知道如何才能返回结果,因此它就丢弃处理结果。这不仅浪费了宝贵的服务器资源,而且延长了服务器的请求队列——甚至还有可能导致服务器故障。
解决这个问题要从两方面进行:第一,防止用户重复提交请求;第二,给用户足够的提示信息,使他们不再感到有重复提交请求的必要。幸运的是,我们可以用javascript同时解决这两方面的问题。
三、简单的javascript解决方案
不要直接提交请求,而是编写一个提交请求的javascript。在提交请求之前,javascript脚本首先检查用户是否已经提交了同样的请求。
这些javascript禁止用户多次提交同一请求。只要在每个页面中加入上面这些简单的javascript代码,你就能够确保用户只提交一次请求。
如果你觉得这种方法对用户太不礼貌,那么,你可以显示一个进度提示框、一个动画或其他有趣玩意吸引用户注意力,直到服务器处理完请求发回结果。
关联文档
DeepSeek 搞钱指令库
T GDWJ 016 公立医院全面预算管理工作指南
人工智能技术发展与应用实践
DeepSeek行业应用案例集解锁
2025AI大模型产业市场前景及投资研究报告
大家都在看
一文读懂:模型上下文协议(MCP)
AI产品经理如何搭建AI业务架构:从基础到应用的三层架构设计
智能BI平台架构的全景解析与应用场景
大模型是怎么被训练出来的?
渠道分析从入门到精通
全面解读DeepSeek蒸馏技术:模型蒸馏和数据蒸馏
一文分享 ChatBI 实践经验
深度学习五大模型:CNN、Transformer、BERT、RNN、GAN解析
推荐文档
信息安全意识培训
什么时候不该用微服务
腾讯大规模云原生平台稳定性实践
数字化营销
O2O行业数据平台实战从监控到诊断的数据产品搭建
咨询顾问的自我成长与发展