1

如何处理用户可能不小心多次点击提交按钮的情况?如果发生这种情况,那么将在表中生成两行。如何避免。我在 JSP 工作。

还要避免back按钮和refresh页面导致在数据库中创建重复输入的问题。

4

7 回答 7

2

几种方式:

  1. 您可以使用 javascript 来禁止在提交按钮中单击两次,但如果用户在两次单击之间使用导航器的“后退”按钮,则它不起作用。

  2. 在服务器端,您可以发送带有保存在用户会话中的唯一 id 的表单(也可以用于 CSRF 对策)。然后在提交表单时,您可以比较然后删除用户会话中的 id。注意并发访问会话(每个请求都有自己的线程)。

  3. 在数据库中检测,但它取决于数据及其约束。第 2 点的一个扩展是将生成的表单 ID 保留在数据库中,并在第一次访问期间将其删除。这种方法的优点是在并发访问的情况下使用事务支持。

  4. 如果表单更新数据库中的特定条目(行 ID 与表单一起发送),则可以认为问题已自行解决,因为它使用相同数据更新同一行两次。

于 2013-04-15T09:19:10.800 回答
2

我建议永远不要过于依赖任何客户端。使用非常易于访问的工具,您几乎可以改变客户端强制执行的任何行为。如果您的应用程序在客户端失败后崩溃/具有未定义的行为,您应该更改您的应用程序。

您可以做的一件事是创建一个类,该类获取此 POST 产生的所有字段,覆盖它的 equals() 方法以尊重所有字段,在用户级别保存请求并将所有其他传入请求与请求列表进行比较您已经拥有该用户。

然后,您可以在成功处理请求对象后立即删除它们。

另一方面,如果您以某种方式再次获得用户相同的请求(通过在用户发布请求时查看“打开”请求列表),您可以忽略它。

于 2013-04-15T09:19:32.730 回答
1

第一个解决方案。禁用 sumbit 按钮 .. 如果可能,第二次检查一些唯一键...

于 2013-04-15T09:17:20.770 回答
1

首先,在客户端,一旦用户单击按钮,就禁用该按钮。

其次,在服务器端,这种形式的某些信息将成为数据库表中的主键。因此,当插入数据时再次向服务器发送相同的信息时,您将得到一个异常,因为主键的值不能重复。

于 2013-04-15T09:13:47.667 回答
1

如果您想 100% 确定提交按钮不能被点击两次,您可以在按钮的 onclick= 方法中的 javascript 中禁用它。

例如,在下面的 javascript (jquery) 中,如果按钮 id 是“发送”...

$('#send').click(function(e) {
    this.disabled = true;
    businessLogicCall();
});
于 2013-04-15T09:14:05.680 回答
0

等待您不再接受按钮上的任何点击,例如禁用提交按钮。

于 2013-04-15T09:13:33.537 回答
0

禁用提交按钮,直到用户更改输入信息,从而表明他想提交另一部分信息。

于 2013-04-15T09:15:41.043 回答