在表单操作之前先发一个$.post


make a $.post before form action takes place

我有一个表单,当用户单击提交按钮时,我想在执行表单操作(转到下一页)之前运行一个单独的PHP脚本。

当然,我可以用evt.preventDefault();停止表单操作,然后我可以激发我的jquery $.post调用,但就我所见,我不能"恢复"或撤消这个preventDefault调用。

那么,在用户单击提交按钮后,但在用户被重定向到表单动作标记中定义的下一页之前,执行处理某些信息的脚本的最佳方式是什么呢?

(当然,我可以把数据结转到下一页,然后执行我想要的任何操作——但在这种情况下,我想把它分开)。

谢谢你的建议!

您可以尝试以下操作:

var posted = false;
$('form').on('submit', function(ev) {
    if ( ! posted ) {
        ev.preventDefault();
        $.post(url).done(function() {
            posted = true;
            $('form').trigger('submit');
        });
    }
    posted = false;
});

或者更简洁,使用额外的参数:

$('form').on('submit', function(ev, posted) {
    if ( ! posted ) {
        ev.preventDefault();
        $.post(url).done(function() {
            $('form').trigger('submit', [true]);
        });
    }
});
  1. 您的$.post调用可以同步运行,因此在收到服务器的响应之前,表单不会提交。

  2. 您可以通过编程方式提交表单,也许可以在回调函数中提交。

form上防止默认,然后运行post,在post成功后,通过id瞄准表单并使用.submit();

$('#submit-button').click(function(e) {
   e.preventDefault();
    $.post({
     url:'url',
     success:function() {
        $('#formid').submit()
     }
     });
});
  1. 继续使用evt.preventDefault()
  2. 调用$.ajax()来运行php脚本
  3. 在$.ajax()成功/失败回调中,检查要运行的php脚本的输出,并相应地进行$.post调用(或不进行)

您可以随时挂起点击事件,并完成您的工作。完成后,只需执行$(form).submit();

工作示例

$("#submitbutton").click(function(e) {
    e.preventDefault(); 
    // do your ajax stuff here.. $.post().
    $("#form").submit();
});

您可以使用本机提交函数,而不是jQuery的submit(),它会再次通过事件处理程序

$('form').submit(function(e){ // change form to your form id
    e.preventDefault();
    var el = this; // store this form in variable
    $.post('/echo/html/',data,function(d){ // your post function
       el.submit(); // trigger native submit function in success callback
    });
});

FIDDLE

在表单标记中,添加onsubmit="myfunction()"