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

Sol*_*d I 8 javascript forms ajax jquery

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

下面,你会看到,当表单提交并根据返回的内容(无论是空白这是可以接受的,或者这是不能接受的错误信息),我想我执行AJAX调用return true;return false;$("form").submit.

我怀疑我的麻烦是在AJAX中success:.请帮助我摆脱resultAJAX调用,以便我可以做类似的事情if (result == "") { return true; } else { return false; }.

工作方式:

$("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');
    });
});
Run Code Online (Sandbox Code Playgroud)

原版的:

$("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
});
Run Code Online (Sandbox Code Playgroud)

ade*_*neo 22

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

$("form").submit(function(e) {
    e.preventDefault();

    var self = this,
        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 == "") self.submit();
    }).fail(function() {
        alert('error');
    });
});
Run Code Online (Sandbox Code Playgroud)

  • @ hex494D49-发生这种情况是因为jQuery事件处理程序隐藏了`submit`事件。换句话说,当您执行`$(“ form”)`时,您最终会进入`$(“ form”)。submit(function(){...})`事件处理程序,该事件处理程序将尝试提交再次提交表单,结束于同一事件处理程序,依次为true再次提交表单,结束于同一事件处理程序...依此类推。当您调用不是jQuery函数的** native ** form.submit()`时,不会触发事件处理程序,并且会提交表单。 (2认同)