是否可以仅刷新表单?

时间:2012-09-19 02:34:05

标签: javascript jquery ajax

我有一个表单,当提交时,它会发布到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知识不是最好的。

帮助=}

3 个答案:

答案 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;

将始终返回5000false的使用是多余的,毫无意义。

要在不重新加载页面的情况下重置表单(在某些浏览器中不一定会重置表单),请使用重置按钮或调用表单的重置方法。如果表单已重置,您可以使用onreset侦听器更新 beenSubmitted 属性。

自表单发明以来,多次提交表单一直是个问题,它通常在服务器处理(如果收到两个相同的请求,则忽略第二个)。

在客户端使用脚本是不可靠的,因为你不知道服务器在做什么,你必须猜测是否需要重新提交表单。