标签: double-submit-problem

如何防止用户在网站上多次发布数据

我正在开发一个Web应用程序(J2EE),我想知道可以从浏览器处理双重帖子的选项.

我过去看过和使用过的解决方案都是客户端的:

  • 用户单击它后立即禁用提交按钮.
  • 按照POST-Redirect-GET模式阻止用户单击后退按钮时的POST.
  • 处理表单的onSubmit事件并使用JavaScript跟踪提交状态.

如果可能的话,我更愿意实现服务器端解决方案.有没有比我上面提到的更好的方法,或者客户端解决方案最好?

java-ee double-submit-problem

16
推荐指数
3
解决办法
3782
查看次数

Html.RenderPartial和Ajax.BeginForm - >提交被调用两次

我有以下索引视图:

@model BoringStore.ViewModels.ProductIndexViewModel
@{
    ViewBag.Title = "Index";
}

<h2>Produkte</h2>

<div id='addProduct'>
    @{ Html.RenderPartial("Create", new BoringStore.Models.Product()); }
</div>

<div id='productList'>
    @{ Html.RenderPartial("ProductListControl", Model.Products); }
</div>
Run Code Online (Sandbox Code Playgroud)

"productList"只是所有产品的列表.

addProduct呈现我的创建视图:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<div id="dialog-confirm" title="Produkt hinzufügen" style="display:none">
@using (Ajax.BeginForm("Index_AddItem", new AjaxOptions { UpdateTargetId = "productList" }))
{ 
    @Html.Raw(DateTime.Now.ToString());

    <div>
        @Html.LabelFor(model => model.Name)
        @Html.EditorFor(model => model.Name)
    </div>
    <br />
    <div>
        @Html.LabelFor(model => model.Price)
        @Html.EditorFor(model => model.Price)
    </div>
    <br /><br />
    <div>
        <input type="submit" value="Produkt hinzufügen" />
    </div>
}
Run Code Online (Sandbox Code Playgroud)

提交表单时,将调用控制器中的Index_AddItem方法.不幸的是,表单总是调用该方法两次.:(

有人可以帮我吗?

asp.net-ajax partial-views razor asp.net-mvc-3 double-submit-problem

15
推荐指数
1
解决办法
1万
查看次数

IE9 Double Form提交问题

我只是想知道是否有人对我所处的情况有一些信息或反馈.目前我正面临"双表提交"问题,我点击"提交"按钮一次,然后提交表格两次.这只发生在IE9中,但我只针对Safari,Chrome(最新),FF(Ver 5/6),IE8和IE9进行了测试.

这是代码:

<!DOCTYPE html>
<html lang="en-us" dir="ltr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title>IE9 test</title>
</head>
<body>
<h1>Testing</h1>
<form method="POST" id="submit_form">
<input type="text" name="x" value="xxxx" />
<input type="text" name="y" value="yyyy" />
<button type="submit" class="btn_sign_in" id="btn_logon" onclick="this.disabled=true;document.forms[0].submit();">Submit</button>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

有问题的部分是:

onclick="this.disabled=true;document.forms[0].submit();"
Run Code Online (Sandbox Code Playgroud)

代码已经在我的网站上存在了很长时间,这是我第一次遇到双提交问题,因为IE9今年才发布,可能这些天越来越多人使用IE9,因此我收到用户对这个问题的抱怨.

最难的部分是双重提交问题并不总是可重现的.有时会提交双倍,有时会提交一次.

我目前的工作是改变:

<meta http-equiv="X-UA-Compatible" content="IE=edge" >
Run Code Online (Sandbox Code Playgroud)

并改为:

<meta http-equiv="X-UA-Compatible" content="IE=8" >
Run Code Online (Sandbox Code Playgroud)

这迫使IE9使用IE8兼容性,它将正确执行Javascript以进行提交.

我已经打电话给微软支持,他们声称这是一个"Javascript兼容性问题",所以我们需要微调我们的Javascript以使我们的网站在IE9下正常工作..(Duh!)

无论如何,是我的代码:

onclick="this.disabled=true;document.forms[0].submit();"
Run Code Online (Sandbox Code Playgroud)

开始已经错了?因为即使其他浏览器没有抱怨,但可能这是不正确的开始?

我希望如果有人也面临类似问题,可以获得更多信息或反馈.目前,如果我不将X-UA-Compatible更改为IE = 8,我可以将我的代码更改为:

onclick="this.disabled=true;"
Run Code Online (Sandbox Code Playgroud)

这也将解决双重提交问题,但是还有一个我们应该注意的IE9兼容性问题列表吗?

谢谢!

javascript forms internet-explorer-9 double-submit-problem

14
推荐指数
2
解决办法
3万
查看次数

在rails控制器中,如何防止双重提交(当用户双提交按钮或按两次输入时)?

好吧,一切都在标题中,但我会解释一下:-)

我的rails应用程序包含许多表单(Ajaxified或不Ajaxified).

为了防止用户提交两次或更多的表格,我使用Javascript.

有一个Ajaxified表单的场景:

  • 用户提交表格(clic或enter)
  • javascript禁用提交按钮
  • rails控制器执行操作(如Soap请求或DB中的插入)
  • rails控制器更新页面并在必要时启用提交按钮(如果有错误)

现在我想添加服务器端代码,以便在用户绕过javascript时保持真正干净.

有什么建议?

javascript forms controller ruby-on-rails double-submit-problem

13
推荐指数
3
解决办法
1万
查看次数

为什么我的表单提交两次?

因为某种原因,我的表单只需按一下按钮即可提交两次.这是我第一次使用jquery Form插件,我想jquery提交一次,表单也"自然"提交.我已经看到,补救措施是将"return false"附加到表单的onSubmit事件处理程序.我以为我在做那件事,但显然它不起作用.

有人可以帮忙吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>User form entry </title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="jquery.validate.js"></script>
<script src="jquery.passwordStrength.js"></script>
<script src="jquery.form.js"></script>
<script>

$(document).ready(function() {
    $('#signupForm').ajaxForm(function() { 
         var queryString = $('#signupForm').formSerialize(); 
         $.post('process.php', queryString);
    });
});
</script>
</head>
<body>
   <form id="signupForm" action="process.php" onsubmit="return false" method="post">
   <fieldset class="password">
          ... form goes here
   <button type="submit" name="formSubmit" value="submit">Click to submit</button>
   </form>

<div id="results"></div>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我已经尝试将onsubmit ="return false"添加到表单元素,但之后我根本没有提交.我也尝试过添加"return false".到jQuery,但后来我还有两次提交.我错过了什么?这似乎是根据jQuery Form Plugin网站的标准方法..我的表单有何不同?

(顺便说一下,只是为了清楚..我不是在谈论通过反复按下按钮连续多次提交多个表格的问题.我的问题是"一个提交按钮推送=两个提交".)

php forms jquery jquery-forms-plugin double-submit-problem

9
推荐指数
1
解决办法
7779
查看次数

表单在Chrome/Safari中提交两次

我正在寻求执行一个基本的表单帖子,但是以下内容在Chrome和Safari中提交给服务器两次(但在Firefox中表现如预期):

<form id="create-deck-form" action="/decks/create" method="post">
  <fieldset>
    <legend>Create new deck</legend>
    <label for="deck-name-field">Name</label>
    <input id="deck-name-field" name="deck-name-field" type="text" value="" maxlength="140" />

    <label for="tag-field">Tags</label>
    <input id="tag-field" name="tag-field" type="text" value="" maxlength="140" />

    <input class="add-button" type="submit" value="Create" />
  </fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)

我想onsubmit在提交之前使用该属性对字段执行验证,但无论返回值是什么true,表单都会提交两次.

我试图将jQuery处理程序绑定到表单,但是在这里也没有阻止默认行为,表单被提交两次,例如:

<script type="text/javascript">
 $(document).ready(function() {
     $("#create-deck-form").submit(function(event){
          if($("#deck-name-field").val() == "") {
            event.preventDefault();
            alert("deck name required");
          }
        });
 });
</script>
Run Code Online (Sandbox Code Playgroud)

虽然我认为这对于一双新鲜的眼睛有一些令人眼花缭乱的明显错误,但我深感困惑的是,为什么提交(无论有无验证)都会在Chrome和Safari中向服务器发送重复的帖子.任何见解都会让我感激不尽.

forms jquery cross-browser facebox double-submit-problem

7
推荐指数
1
解决办法
7161
查看次数

IE提交表格两次

我在IE中有这个问题,有时我的表单提交两次.我知道点击按钮两次的问题,这不是问题.但就我而言,我只点击一次.我检查了数据库中的记录,有两条记录.

<input type="button" value="Approve" name="btn_approve" id="btn_approve">
<input type="button" value="Reject"  name="btn_reject" id="btn_reject">

<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script> 
<script type="text/javascript" src="js/jquery-ui-1.8.20.custom.min.js"></script> 
<script>
$(document).ready(function () {
    $("#btn_approve").click(function () {
        // some validation before submitting the form

        $("#my_form").submit();
    });
});
</script>
Run Code Online (Sandbox Code Playgroud)

html jquery double-submit-problem

5
推荐指数
2
解决办法
8138
查看次数

我为什么要两次提交表格?jQuery submit()带单选按钮

我正在使用jQuery在MVC应用程序中提交表单.我在控制器内部有一个断点,我看到它被击中了两次.我究竟做错了什么?

这是我的jQuery

 (function ($) {

    $(document).ready(function () {

        $(':radio').change(function () {

            $('#frmMDR').submit();
        });

    });
})(jQuery);
Run Code Online (Sandbox Code Playgroud)

这是表格html

<form action="/Module/ModuleIndex" id="frmMDR" method="get">
  <input id="rdoMaintenance" name="module" type="radio" value="Maintenance" /><label for="rdoMaintenance">M</label>
   <input id="rdoDiagnostics" name="module" type="radio" value="Diagnostics" /><label for="rdoDiagnostics">D</label>
   <input id="rdoRepair" name="module" type="radio" value="Repair" /><label for="rdoRepair">R</label>
 <input id="hdnVehicle" name="hdnVehicle" type="hidden" value="" />
</form>
Run Code Online (Sandbox Code Playgroud)

我猜我不应该使用change事件.如果有人知道如何解决问题,我很乐意听到任何想法.非常感谢任何提示.

干杯,
〜在圣地亚哥

html javascript jquery radio-button double-submit-problem

3
推荐指数
1
解决办法
2626
查看次数

jQuery提交事件发生两次

我的jQuery submit()事件发射两次,我不知道为什么.

我正在使用模板引擎动态构建我的HTML,所以我最终$(document).ready()多次调用,如下所示......

<script>
$(document).ready(function() {
    $("form.search input[type='image']").click(function() { $(this).closest('form.search').submit() })
})
</script>
Run Code Online (Sandbox Code Playgroud)

...后来...

</script>
$(document).ready(function() {
    # I have put an `unbind('submit')` in here to be sure I have nothing else but this particular function bound to `submit`
    $('form.search').unbind('submit').bind('submit',function(event) {
        event.stopPropagation();
        search_term = $(this).find('input[type=text]').val()
        $new_keyword = $('<li class="filter keyword selected" name="'+search_term+'">'+search_term+'</li>')
        alert('event fired!')
        $("#keywords ul").append($new_keyword)
        do_search_selected()
        return false; // Stop the form from actually submitting
    })
})
</script>
Run Code Online (Sandbox Code Playgroud)

表格HTML:

<form class="search" method="get" action="/search/">

    <div>
        <input id="searchfield"type="text" …
Run Code Online (Sandbox Code Playgroud)

javascript jquery dom double-submit-problem

3
推荐指数
1
解决办法
9236
查看次数

表单在keyup上使用submit()提交两次

我有一个与此类似的jQuery/HTML代码:

<form action="/SomeAction" method="post">
  <input id="my-textbox" type="text" placeholder="Write something and press enter to continue..." />
</form>

<script type="text/javascript">
 $(function() {
     $('#my-textbox').keyup(function(e) {
        var $textbox = $(this);
        if ($textbox.val().length > 0 && e.keyCode == 13) {
           $textbox.parent('form').submit();
        }
     });
 });
</script>
Run Code Online (Sandbox Code Playgroud)

目的是在用户按下"Enter"键时自动提交表单.我经常使用Firefox,所以在我使用谷歌浏览器和Internet Explorer进行测试之前,一切都还可以.

当我在后面的浏览器中按下Enter键时,有时我会提交两次表单.这很容易被注意到,因为我会在我的数据库中获得重复的条目,并且我会看到两个POST使用Fiddler.

经过一些测试,我发现我的问题是jQuery代码,因为文本框会在没有它的情况下自动提交,并且POST在某些浏览器中使用此代码会产生第二个代码.

我的问题是:

为什么浏览器不能巧妙地阻止第二个表单发布(就像Firefox在我的测试中所做的那样)?

我是否应该在所有平台的所有主流浏览器中都期待此行为?

有没有办法改进这个代码所以我使用JavaScript执行提交,但是没有提交两次提交的表单?

javascript forms jquery javascript-events double-submit-problem

3
推荐指数
2
解决办法
5275
查看次数

表单提交两次

我有一个处理付款的表单,但大约每 300 次付款中就有一次出现两次,我的日志显示所有这些事件都有两次请求。

我实现了一些在单击后禁用提交按钮的 JavaScript,它似乎对我来说工作正常,但我仍然时不时地收到双重提交。

有谁知道还有什么可能导致表单提交两次?

html php forms http double-submit-problem

1
推荐指数
1
解决办法
2386
查看次数

jQuery请求提交两次

$("#classesLink").click(function(event) {
    $("#globalUserContent").children().slideUp("normal", function() {
        $.ajax({
            type: "POST",
            url: "classes.php?token="+randString+"",
            success: function (msg) {
                $("#globalUserContent").html(msg);
            },
            error: function (msg) {
                $("#globalUserContent").html(msg);
            }
        });            
    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

我有上面的代码,当我点击.classesLink按钮并检查firebug请求时,它显示它被提交两次,它有什么问题吗?

ajax jquery double-submit-problem

0
推荐指数
1
解决办法
974
查看次数

双击提交按钮时如何避免两次插入两个相同的记录?

我有一个弹出窗口,其中有两个onclick方法,如"Submit"和"Discard".

当我单击提交两次时,它会插入两条记录,这意味着重复记录.

我怎么能避免这个?

java ajax struts2 double-submit-prevention double-submit-problem

0
推荐指数
1
解决办法
2333
查看次数