在执行表单操作之前创建$ .post

时间:2013-08-01 16:42:12

标签: php javascript jquery ajax

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

当然我可以使用evt.preventDefault();停止表单操作,然后我可以触发我的jquery $.post调用但是我无法'恢复'或撤消这个preventDefault调用,就我所见

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

(当然我可以在下一页继承数据并执行我想要的任何内容 - 但在这种情况下,我希望将其分开)。

感谢您的任何建议!

7 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

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

或者更简洁,使用extra parameters

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

答案 1 :(得分:1)

  1. 您的$ .post调用可以同步运行,因此在您收到服务器的响应后,表单才会提交。

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

答案 2 :(得分:1)

阻止form上的默认设置,然后在post成功时运行post,按ID定位表单并使用.submit();

$('#submit-button').click(function(e) {

   e.preventDefault();

    $.post({
     url:'url',
     success:function() {
        $('#formid').submit()
     }
     });

});

答案 3 :(得分:0)

  1. 继续使用你的evt.preventDefault()。
  2. 进行$ .ajax()调用以运行您的php脚本。
  3. 在$ .ajax()成功/失败回调中,检查您要运行的php脚本的输出,并相应地进行$ .post调用(或不)。

答案 4 :(得分:0)

您可以随时挂钩点击事件,并完成您的工作。 当你完成后,你只需要做$(form).submit();

Working example

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

答案 5 :(得分:0)

你可以使用本机提交函数而不是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

答案 6 :(得分:-2)

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