所以我有这个使用AJAX执行相当长的数据发布的表单,现在我有点偏执,一些聪明的家伙可能会打开firebug并重新触发发布过程,而之前仍然在行动。我该如何避免这种情况?
谢谢!
答案 0 :(得分:2)
你可以:
action
属性。话虽如此,在前端只能做很多事情来阻止重新提交 - 总会有办法解决。如果您对此非常关注,那么服务器端验证也是必要的(通常也会建议)。
答案 1 :(得分:1)
在提交表单时设置条件,并添加表单提交检查。 jQuery中的示例:
$('form').submit(function(e) {
// If form has been submitted
if($(this).data('submitted') == true) {
e.preventDefault();
return;
}
// Set the condition
$(this).data('submitted',true);
//...
//After form has been submitted successfully, release the condition
$(this).data('submitted',false);
});
这是禁用表单部分的首选,因为提交可以从表单中的任何输入进行。
答案 2 :(得分:1)
首先,考虑到你因为绕过客户端控制而担心多次提交(即使用Firebug或Fiddler重新发出请求),你可以忘记在客户端应用控件的任何选项(即禁用)按钮,JS检查提交状态等)。这是您必须在服务器上处理的。
查看synchroniser token pattern。这通常用于帮助防止CSRF(如链接中的上下文),但它也用于避免多个表单提交。如果您可以在您的AJAX请求中传递一个令牌,该请求经过验证,然后在请求开始处理之后失效(显然在繁重的工作开始之前),您就可以自己防止多次提交。