微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel:多次提交表单中断结帐过程

如何解决Laravel:多次提交表单中断结帐过程

由于第三方 API 调用,在我的自定义 Laravel 商店中创建订单需要一些时间。为防止用户两次提交结帐表单,我禁用了提交位并通过 Javascript 显示并替换为进程图标。

尽管如此,有些客户无法等待 10 秒才能完成该过程。他们重新加载页面并再次提交表单。在这种情况下,商店会生成两个订单。

现在我可以使用令牌匹配 (Prevent Multiple Submitting in one button laravel) 防止表单多次提交服务器站点。实际上,此解决方案会导致其他问题。所以我不能简单地将客户重定向到成功页面,因为订单过程可能不完整。否则客户会卡在结账页面

解决此问题的最佳做法是什么?

解决方法

根据我们在您原始帖子的评论中的讨论:

主要问题是服务器处理表单提交所需的时间长度,这让用户有机会不耐烦并刷新页面,然后提交相同的数据两次。 用于获取直接运输数据的外部 API 调用是花费最多时间的过程。

所以我建议在允许最终提交表单之前获取直接运输数据。您可以将其作为 Ajax 请求执行并保持禁用提交按钮,直到返回直运数据。 这样,当用户提交表单时,服务器端的处理时间就被最小化了。

表单提交的处理时间仍有可能足够长,以便用户在提交完成之前刷新页面。

我认为剩下的过程应该足够短,让用户在提交完成之前没有机会刷新页面。如果是,那么您可能需要查看提交逻辑中需要时间的任何流程,并在提交之前准备它们,例如使用直接运输 API 调用或将它们推送到队列工作人员。

在返回响应之前,您还可以将数据库持久化作为提交过程中的最终操作。这样,如果用户能够在流程完成之前刷新,则数据被持久化的可能性最小,这意味着如果表单第二次提交,数据被复制的可能性最小。

您可以在表单中设置令牌以确保表单只能加载一次或在之前的步骤中存储“预期”订单并使提交成为标记“预期”订单的简单操作作为一个“真实”的订单。 但是这些方法与假设请求和响应周期不会中断的典型表单提交请求方法相比过于复杂。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。