我有一个问题,当我用POST请求提交表单时,如果我 "垃圾邮件"(在页面重定向之前尽可能多地点击提交按钮)提交按钮,它就会在我每次按下按钮时创建一个请求。为什么它会这样做?是不是因为CSRF标记没有再生?是不是因为我在本地主机上运行,我真的不知道到底发生了什么,我开始迷茫了。
所以发生的事情是,每点击一次表单上的提交按钮,它就会插入那么多重复的数据条目。
我搜索了一下,发现在Stack上还有一个帖子和我有同样的问题.
但这个答案并不能让我满意。一定有更好的办法,并且适用于所有的帖子要求。
EDIT这是一个链接到我的控制器,包含beforeFilter,我的资源控制器和视图。
CSRF不会阻止请求的发出。 它只是阻止请求被处理。 如果(在chrome中),你打开你的开发者工具并检查网络选项卡,只有第一个请求会在重定向之前以黑色显示(其余的都是红色的,表示错误。
如果你想在页面重载前禁止第1个请求之后的请求,你可以用jQuery或Javascript禁用提交按钮。
$(document).ready(function(){
$('#your-submit-button-id').click(function(){
$('#your-submit-button-id').attr('disabled', true);
});
});
CSFR(Cross Site Request Forgery)不是用来验证请求的数量,而是用来验证SESSION。在您清除浏览器中的cookie和缓存后,令牌应该会重新生成。
如果您想防止多个请求被提交,请像上面提到的那样禁用提交按钮,或者使用一个标志。https:/jeykeu.wordpress.com20120309jquery-prevent-multiple-ajax-requests(防止多次请求)
看来,在按钮的'onclick'事件中添加以下函数。"this.disabled=true;this.value='Submiting...';this.form.submit();"
添加到按钮的 "onclick "事件中就可以了。
<button type="submit" onclick="this.disabled=true;this.value='Submiting...';this.form.submit();" class="btn">Submiting...</button>