8

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

下面,您将看到我在提交表单时执行 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');
    });
});

原来的:

$("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
});
4

2 回答 2

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');
    });
});
于 2013-06-13T21:32:47.417 回答
3

用于e.preventDefault();阻止表单提交,然后使用this.submit()(不是调用jQuery.submit()触发函数,而是调用native<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();
};
于 2013-06-13T21:23:57.767 回答