我有一个表单,当提交时,它会发布到div。好吧,所以我发现问题是我得到了双重提交,所以我试图应用一些我发现的jquery插件,但是它们没用,因为如果你双击得足够快,我仍然会得到双重提交。从我发现的那些我看到了防止它的最佳方法是
if (this.beenSubmitted) return false;
else
this.beenSubmitted = true;
然后,我注意到如果需要再次发送表单,用户必须刷新页面才能发送它。在我的情况下,我希望他们能够在发送后再次发送,(我不反对自己,因为它会有不同的内容)。为了更好地解释它,这个形式发布了想法。如果你想发布2个不同的想法,你必须刷新他的页面发布。如果你点击足够快,防止双重提交将有助于提交相同的想法两次。所以,我做的是我添加了这个“5000”:
if (this.beenSubmitted) return false, 5000;
else
this.beenSubmitted = true;
所以,现在它刷新了我的页面。但我有点挑剔,哈哈。所以我觉得整个页面必须刷新很烦人。如果您输入然后刷新,该怎么办?我总是可以降低我知道的5000,但我仍然觉得很烦人,以防你开始浏览网站或放大,你最终会刷新。
所以,我的问题是,有没有办法只刷新表格?或者更好的方法来防止双重提交实际适用于这种情况(你能在几秒后提交)?
这是脚本:
<script type="text/javascript">
$(document).ready(function(){
$("form#myform").submit(function() {
var addcontent = jQuery('#addcontent').attr('value');
if ( addcontent.replace(/\s/g,"") == "" ) return false;
if (this.beenSubmitted) return false,5000;
else
this.beenSubmitted = true;
$.ajax({
type: "POST",
url: "post.php",
data:"addcontent="+ addcontent,
success: function(){blah blah blah, ton sof code here including pagintion here, insert into a div here also, if u need this let me know.
});
</script>
我大部分都是在这里询问questinos。我的Jquery和Ajax知识不是最好的。
帮助=}
答案 0 :(得分:1)
Rate limiting to prevent malicious behavior in ExpressJS
以上链接有关于在提交按钮上放置计时器的信息,以便您无法在3秒内再次点击它。
<script>
var submitTimer = new Collate(3000);
</script>
<form action="post" onsubmit="return submitTimer.idle();">
答案 1 :(得分:0)
为什么不使用this.beenSubmitted = true方法并将其与超时结合使用?例如,在5000ms之后执行超时并将this.beenSubmitted设置为false。
答案 2 :(得分:0)
声明:
return false, 5000;
将始终返回5000
,false
的使用是多余的,毫无意义。
要在不重新加载页面的情况下重置表单(在某些浏览器中不一定会重置表单),请使用重置按钮或调用表单的重置方法。如果表单已重置,您可以使用onreset侦听器更新 beenSubmitted 属性。
自表单发明以来,多次提交表单一直是个问题,它通常在服务器处理(如果收到两个相同的请求,则忽略第二个)。
在客户端使用脚本是不可靠的,因为你不知道服务器在做什么,你必须猜测是否需要重新提交表单。