jQuery AJAX表单提交两次

Jam*_*ett 43 ajax jquery submit

我有一个表单,我通过jQuery捕获并通过AJAX发送.我的问题是每次刷新页面时表单都会提交多次.

我试图取消绑定提交按钮,但是在第一次提交后表单正常发布.任何帮助,将不胜感激

$('#exportForm').submit(function() {
  $.ajax({
    type: "POST",
    url: $(this).attr('action'),
    data: $(this).serialize(),
    success: function(response) {
      $('#exportForm').unbind('submit');
      console.log(response);
    }
  });
  return false;
});
Run Code Online (Sandbox Code Playgroud)

小智 109

除了调用preventDefault之外,还可以在事件上调用stopImmediatePropagation.

$('#exportForm').submit(function(e){
    e.preventDefault();
    e.stopImmediatePropagation();
    $.ajax({
        type: "POST",
        url: $(this).attr( 'action' ),
        data: $(this).serialize(),
        success: function( response ) {
            console.log( response );
        }
    });

    return false;
});
Run Code Online (Sandbox Code Playgroud)

  • 虽然您的答案可以解决问题,但如果您能够提供有关答案如何解决问题的说明,则总是更好.在这种情况下,为什么`preventDefault`是不够的.这是进一步改善这一和未来答案的建议. (12认同)
  • 添加e.stopImmediatePropagation(); 为我工作,谢谢克里斯!今天晚上我一直在摸不着头两个小时.虽然e.preventDefault()本身对我有用,但我怀疑它是因为它对于简单的链接或按钮很好,但是当在表单的提交事件中工作时,你必须使用e.stopImmediatePropagation()来防止事件从冒泡到dom.请参阅http://api.jquery.com/event.stopImmediatePropagation/. (11认同)
  • 这就是答案. (4认同)

Dev*_*One 31

您最有可能使用buttonsubmit触发ajax事件.试试这个:

$('#exportForm').submit(function(e){
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: $(this).attr( 'action' ),
            data: $(this).serialize(),
            success: function( response ) {
                console.log( response );
            }
        });

        return false;
    });
Run Code Online (Sandbox Code Playgroud)

  • 什么不起作用?它还在提交两次?您确实意识到所有这些AJAX例程正在通过POST进行非常标准的提交,对吗?如果`#exportForm`是一个按钮,我建议你将`.submit`改为`.click`. (3认同)
  • 抱歉,经过更多测试后发现它不起作用。 (2认同)
  • 这对我来说也不起作用,我不得不添加e.stopImmediatePropagation(); 正如Chris Sercombe在下面提出的那样. (2认同)

小智 11

如果您正在使用某种验证(例如jQuery验证),表单将被提交两次,因为除了$('#exportForm').submit您自己编写之外,验证插件还将在成功验证所有字段后提交表单.

注意:如果您使用的是jQuery验证,请避免使用.submit().相反,使用submitHandler.


Gam*_*mer 6

您可以简单地使用e.stopImmediatePropagation();

例如 :

$('#exportForm').submit(function(e){
    e.stopImmediatePropagation();
Run Code Online (Sandbox Code Playgroud)