jQuery在使用ajax验证后提交表单

Posted

技术标签:

【中文标题】jQuery在使用ajax验证后提交表单【英文标题】:jQuery submit form AFTER validating it with ajax 【发布时间】:2014-06-11 21:56:09 【问题描述】:

我有一个表单,其中包含一个需要在服务器端通过验证的棘手字段。所以我需要捕获提交,用这个字段发送ajax请求,获取结果,如果结果有效则继续表单提交,否则停止提交并显示消息。

我该怎么做?

我有点迷失在事件和回调的“大局”中。

这是我目前所拥有的。

$("form").submit(function( event ) 
    event.preventDefault();
    return check();
);


function check() 

    var field = $('#myFiled').val();
    if (!field ) 
        show.error('Please enter VIN number and try again.');
        return false;
    
    $.getJSON('MyURL', function(data)
        if (!data.valid) show.error('Invalid entry! Please try again.');
    )

更新 请阅读问题。 如果验证成功,我需要continue regular 提交表单。不是通过 AJAX。

【问题讨论】:

【参考方案1】:
$("form").submit(function( event ) 
    event.preventDefault();
    checkAndSubmit();
);


function checkAndSubmit() 

    var field = $('#myFiled').val();
    if (!field ) 
        show.error('Please enter VIN number and try again.');
    
    else 
        $.getJSON('MyURL', function(data)
            if (!data.valid) 
                show.error('Invalid entry! Please try again.');
            
            else 
                $.post('yourFromPostURL', $('form').serialize(), function(data)
                    //show something of success or failure.
                );
            
        )
    

【讨论】:

我需要继续定期提交。不是 $.post @dklingman 我完全同意你关于serialize 这是在这种情况下最好的方法。 我进行了一些搜索,除非采用我建议的方法,否则我发现您正在尝试做的所有事情都不会发生。 link。另一方面,粗鲁也不会给你太多帮助。 你是第三个没有看问题的人。我不需要 AJAX 表单提交 @rinchik 我根据您最新的 cmets 重新考虑了我的答案。【参考方案2】:

从您的check() 函数来看,您已经了解基本的 javascript 验证。如果您希望表单的验证失败,请让其 .submit() 方法返回 false,否则返回 true。

只需像处理 field 变量一样处理 AJAX 请求返回的数据即可。

也许您缺少的一件事是如何使 check() 从 getJSON 函数内部返回 false。答案是变量作用域的简单问题。

var data;
$.getJSON('MyURL', function(data_)
        data = data_;

    );
if (!data.result) return false;

由于 JavaScript 具有函数作用域,data 仍可在 .getJSON() 内部访问。

还有一件事,.getJSON() 是一个异步 AJAX 请求,这意味着您的验证功能将在不等待请求结果的情况下完成。您想使用 syncrhonous ajax 请求,因此您的 check() 函数在验证完成之前不会完成。但是,没有办法使.getJSON() 同步,因此您必须使用.ajax() 方法。见this post。

编辑: 您的问题是,如果没有验证错误,则不会返回值。你必须return true;

【讨论】:

你读过这个问题吗?你知道什么是异步吗?什么是回调? 我并不是要粗鲁,但在什么宇宙中,您的上述作品是我问题的答案?特别是考虑到您的代码与您的 referencing 相矛盾【参考方案3】:

AJAX 表单提交的替代方法是阻止表单提交并在按钮级别执行验证。

$('#submitButtonID').click(function (e) 
    e.preventDefault();
    //start your AJAX validation
    checkAndSubmit();

然后验证并成功后,您仍然可以定期提交表单。

function checkAndSubmit() 
    var field = $('#myField').val();
    if (!field ) 
        show.error('Please enter VIN number and try again.');
    
    else 
        $.getJSON('MyURL', function(data)
            if (!data.valid) 
                show.error('Invalid entry! Please try again.');
            
            else 
                $('form').submit();
            
        );
    

服务器端验证将在发布后运行,但您不会使用 AJAX 验证中断表单提交,因为它仅在按钮级别捕获。 (如果需要捕获回车键,请看这个答案:Capturing Enter button to submit form

【讨论】:

以上是关于jQuery在使用ajax验证后提交表单的主要内容,如果未能解决你的问题,请参考以下文章

jquery+ajax验证不通过也提交表单问题处理

jQuery 表单验证和 Ajax 提交的问题

使用 ajax 验证 jquery / 标准 javascript 提交表单

使用JQuery的.ajax()提交表单后当前页面表单内容被清空,请问如何保留数据?

怎么使用jquery提交表单

重力表单提交后的jQuery回调