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

标签 javascript jquery ajax forms

<分区>

我想使用 AJAX 来确定表单的值是否为我所接受(这不是表单验证)。 AJAX result 将决定表单是否被提交。

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

我怀疑我的问题在于 AJAX 的成功:。请帮助我从 AJAX 调用中获取 result,这样我就可以执行类似 if (result == "") { return true; 的操作。 } else { 返回错误;

工作:

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

最佳答案

由于 ajax 调用是异步的,你必须阻止表单提交,然后当返回结果时,你检查它是否符合条件并使用 native 提交处理程序提交表单,避免 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');
    });
});

关于Javascript - 根据ajax响应停止表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17097245/

相关文章:

javascript - 如何将变量传递给setTimeout?

javascript - 砖石图像加载不工作

javascript - 在 .click() 之后更改 .css()

ajax - 我应该为 ajax 请求的操作命名什么?

javascript - 调试 AJAX 请求

javascript - 如何使用jquery删除靠近父级的相似HTML标签?

javascript - 如何修复 jslint 错误 'Don' t 在循环内创建函数。 while 在循环内使用 find 函数

javascript - javascript 仅在某些 css 规则内联时才有效

javascript - Accordion 式下拉按钮未关闭

javascript - 查找 div 中出现文本的特定位置