Laravel 4 - 防止表单提交多个条目.

问题描述 投票:0回答:3

我有一个问题,当我用POST请求提交表单时,如果我 "垃圾邮件"(在页面重定向之前尽可能多地点击提交按钮)提交按钮,它就会在我每次按下按钮时创建一个请求。为什么它会这样做?是不是因为CSRF标记没有再生?是不是因为我在本地主机上运行,我真的不知道到底发生了什么,我开始迷茫了。

所以发生的事情是,每点击一次表单上的提交按钮,它就会插入那么多重复的数据条目。

我搜索了一下,发现在Stack上还有一个帖子和我有同样的问题.

防止用Laravel 4创建多个条目

但这个答案并不能让我满意。一定有更好的办法,并且适用于所有的帖子要求。

EDIT这是一个链接到我的控制器,包含beforeFilter,我的资源控制器和视图。

php forms laravel submit
3个回答
0
投票

CSRF不会阻止请求的发出。 它只是阻止请求被处理。 如果(在chrome中),你打开你的开发者工具并检查网络选项卡,只有第一个请求会在重定向之前以黑色显示(其余的都是红色的,表示错误。

如果你想在页面重载前禁止第1个请求之后的请求,你可以用jQuery或Javascript禁用提交按钮。

$(document).ready(function(){

    $('#your-submit-button-id').click(function(){
        $('#your-submit-button-id').attr('disabled', true);
    });

});

0
投票

CSFR(Cross Site Request Forgery)不是用来验证请求的数量,而是用来验证SESSION。在您清除浏览器中的cookie和缓存后,令牌应该会重新生成。

如果您想防止多个请求被提交,请像上面提到的那样禁用提交按钮,或者使用一个标志。https:/jeykeu.wordpress.com20120309jquery-prevent-multiple-ajax-requests(防止多次请求)


0
投票

看来,在按钮的'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>
© www.soinside.com 2019 - 2024. All rights reserved.