jQuery在发送表单之前通过AJAX执行操作不起作用

时间:2014-03-30 23:05:14

标签: jquery ajax preventdefault

我需要在提交表单时通过AJAX将一些数据保存到数据库中,然后恢复表单的默认操作并将其提交给PayPal。 以这种方式完成后,数据已成功保存在数据库中,但表单不会进一步提交。

$('#saveBeforePay').on('submit', function(e){
    e.preventDefault();
    $.post('ajax/save-cart', $(this).serialize())
    .done(function(response){
        if ( response == 200 ) {
            return true;
        }
    });
});

我尝试的另一种方法是

$('#saveBeforePay').on('submit', function(e){
    $.post('ajax/save-cart', $(this).serialize())
    .done(function(response){
        if ( response != 200 ) {
            e.preventDefault();
        }
    });
}); 

现在表单提交但数据未保存到数据库。我从网络标签中获取此信息

请求标题小心:显示临时标题 而Status TextCanceled

这里有什么问题?

编辑:工作代码

$('#saveOrder').on('click', function(e){
    e.preventDefault();
    var token = $('.token').val();
    $.post('ajax/save-cart', {token: token})
    .done(function(response){
        if ( response == 200 ) {
            $('#saveBeforePay').submit();
        }
    });
});

1 个答案:

答案 0 :(得分:1)

我通常用这样的东西做的是在表单中有一个锚标签并将初始事件绑定到那个而不是表单onsubmit

$('a#submit').on('click', function () {
    $.post('foo', {}).done(function () {
         $(this).closest('form').trigger('submit');
    });

});

这样你就不会阻止正常的表单执行,因此你可以在想要使用它时调用submit事件。