Javascript - 根据ajax响应停止表单提交

时间:2013-06-13 21:17:53

标签: javascript jquery ajax forms

我想使用AJAX来确定表单的值是否可以接受(这不是表单验证)。 AJAX result将确定表单是否已提交。

下面,您将看到我在提交表单时执行AJAX调用并根据返回的内容(可接受的空白或不可接受的错误消息),我喜欢致return true;return false; $("form").submit

我怀疑我在AJAX的success:中遇到了麻烦。请帮助我从AJAX调用中获取result,以便我可以执行if (result == "") { return true; } else { return false; }之类的操作。

WORKING:

$("form").submit(function(e) {
    e.preventDefault();
    var form = this;
    var tray = $('select[name=tray_id]').val();
    $.ajax({
        type: "POST",
        url: "modules/reserve-check.php",
        data: {tray_id: tray},
        cache: false
    }).done(function(result) {
        if (result == "")
            form.submit();
        else
            alert(result);
    }).fail(function() {
        alert('ERROR');
    });
});

ORIGINAL:

$("form").submit(function() {
    var tray = $('select[name=tray_id]').val();
    $.ajax({
        type: "POST",
        url: "modules/reserve-check.php",
        data: {tray_id: tray},
        cache: false,
        success: function(result) {
                alert(result);
        },
        error: function(result) {
            alert(result); //This works as expected (blank if acceptable and error msg if not acceptable)
        }
    });

    /*
    if (result == "")
        return true; 
    else
        return false; 
    */
    return false; //this is here for debugging, just to stop the form submission
});

2 个答案:

答案 0 :(得分:18)

由于ajax调用是异步的,您必须阻止表单提交,然后在返回结果时,检查它是否与条件匹配并使用本机提交处理程序提交表单,避免{{1}在jQuery事件处理程序中:

preventDefault()

答案 1 :(得分:1)

使用e.preventDefault();阻止表单提交,然后使用this.submit()(不调用jQuery .submit()触发器函数,而是调用本机<form> .submit()函数)提交表格。

$("form").submit(function(e) {
            e.preventDefault();
            var tray = $('select[name=tray_id]').val();
            var form = this;
            $.ajax({
                type: "POST",
                url: "modules/reserve-check.php",
                data: {tray_id: tray},
                cache: false,
                complete : function(result){callback(result, form)}
            });       
        });

var callback = function(result, form){
  if(!result)
    form.submit();
};