2011-11-30 105 views
0

我正在使用第三方支付服务,该服务会在用户的网站上进行付款后将我的用户发送回我的网站。它用javascript(setTimeoutlocation='my_site.com?data')向用户返回,但如果用户需要的时间太长,还可以点击一个按钮。当浏览器由于javascript而已经加载我的网站时发生双重请求,并且用户单击按钮。
我可以阻止请求被处理两次吗?或者我应该简单地处理它两次?防止重复请求处理

现在,当两次处理同一个请求时,我显示“请求已处理”,但由于两个请求几乎同时发生,用户从不会看到说明请求被正确处理的页面。

+2

对于用户而言,“请求处理成功”和“请求已处理”之间没有区别(假设已经处理的请求中没有发生错误)。那么为什么要向用户展示这些不必要的信息。只要确保你的网站不会中断,用户就能得到想要的回应。 – Gerben

回答

1

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

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

如果它们完全相同,则可以显示“正确处理”页面,无论是第一次还是第二次还是第十次访问页面。

处理此问题的其他技术可能包括确保您的着陆页返回更快。据推测,问题在于你的一方正在做一些合理的工作,导致他们放弃并进行点击。如果您可以减少显示内容的时间,那么这可能会以更好的方式解决您的问题。这可能涉及到一些东西,例如回应一个有您的网站品牌的小页面,并说“请等待我们处理您的订单”或其他任何内容。然后将控制权交给您,让您在开始时更智能地处理双击事件。

虽然确切的解决方案将取决于您的具体情况。

+0

我认为你的第一个选择,包括时间框架,是最合适的解决方案。 –

3

理想按钮应该在您的服务提供商被禁用,否则你就必须优雅地管理它在你的身边......

+0

我无法改变他们身边的任何东西,所以我无法删除或禁用按钮。 –

+0

我知道,这就是为什么我写“理想”;-) – Leon

1

只是禁用调用form.submit()之前提交按钮:

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

第三方正在产生超时和按钮点击(这可能不是一个表单提交)。 – Chris