防止双重请求处理

时间:2011-11-30 16:04:22

标签: javascript html forms

我正在使用第三方付款服务,该服务在我们的网站上付款后将我的用户发回我的网站。它会向用户发回javascript(setTimeoutlocation='my_site.com?data'),但如果用户花了很长时间,也可以点击该按钮。当浏览器因为javascript而加载我的网站时,会发生双重请求,用户点击该按钮 我可以阻止请求被处理两次吗?或者我应该简单地处理两次?

现在,我显示一个"请求已经处理好了#34;当同一个请求被处理两次,但由于这两个请求同时发生时,用户永远不会看到表示请求被正确处理的页面。

3 个答案:

答案 0 :(得分:3)

理想情况下,应该在您的服务提供商处禁用该按钮,否则您必须优雅地管理它... ...

答案 1 :(得分:1)

只需在致电form.submit()之前停用提交按钮:

document.getElementById("submit").disabled=true;

答案 2 :(得分:1)

在这种情况下,您希望您的用户获得正确的反馈,并且从您所说的内容中您知道他们当前会丢失对第一个请求的回复。

因此,您可能想要做的是针对任何后续请求(可能仅在特定时间范围内)检查事件是否已经处理过。如果已经处理过,您可能需要检查处理是否一致(即数据是两次都相同并且如果数据实际上不同则适当处理)。

如果完全相同,您可以显示“正确处理”页面,无论是第一次,第二次还是第十次进入页面。

处理此问题的其他技巧可能包括确保您的目标网页返回更快。据推测,问题在于,正在做出合理的工作量,这会导致他们放弃并进行点击。如果您可以缩短显示内容的时间,那么可以稍微更好地解决您的问题。这可能涉及一些事情,例如退回一个包含您网站品牌的小页面,并说“请等待我们处理您的订单”或其他任何内容。然后将控件放在您的手中,让您在开始时更智能地处理双击场景。

确切的解决方案将取决于您的确切情况。