onSubmit表单 - 用于验证表单的Ajax请求

时间:2015-03-14 11:19:59

标签: javascript jquery ajax json forms

我有这种情况,当提交html表单时,我们调用javascript方法来验证表单。问题是验证是通过Ajax请求调用php函数完成的,该函数返回空的json数组或包含错误的数组。

我正在使用Ajax请求,因为此newValidation函数将用于我的应用程序上的所有表单,因此所有字段ID名称和内容都与验证消息动态相同。

控制台日志结果为:

Undifiend

应为TrueFalse

所以看起来.done在console.log之后运行。

我以为.done正等到ajax结束然后才继续?

我之所以要问我需要这个.done首先运行,以便它可以协助应答变量,然后只返回布尔值到表单。这甚至可能吗?

更新:

Html格式:

<form id="systemManagementSettings" action="#" method="POST" onsubmit="return newValidation('systemManagementSettings')">

的JavaScript

function newValidation(formId){
var answer;
var $inputs = $('#'+formId+' :input');
    var values = {};
    $inputs.each(function() {           
            values[this.id] = $(this).val();
            $( "div#"+this.id+"_validation" ).text("");
    });

var FinalValidation = $.ajax({
    url: "validation/getValidationData",
    type: "POST",
    data: {form: formId, values: values},

});
FinalValidation.done(function(data){
    var resultArray = JSON.parse(data);

    if($.isEmptyObject(resultArray))
    {
        answer = true;                      
    }
    else
    {
        $.each( resultArray, function( key, value ) {               
            $( "div#"+key+"_validation" ).text(value);              
        });
        answer = false;
    }
});

console.log(answer);    

return answer;
}

1 个答案:

答案 0 :(得分:0)

如何阻止表单实际提交? 使用event.preventDefault()

<强>更新

done函数中提交表单。

function newValidation(formId){
    var answer;
    var $inputs = $('#'+formId+' :input');
        var values = {};
        $inputs.each(function() {           
            values[this.id] = $(this).val();
            $( "div#"+this.id+"_validation" ).text("");
        });

    var FinalValidation = $.ajax({
        url: "validation/getValidationData",
        type: "POST",
        data: {form: formId, values: values},
    });

    FinalValidation.done(function(data){
        var resultArray = JSON.parse(data);

        if($.isEmptyObject(resultArray))
        {
            $.ajax({
                url: $('#'+formId).attr('action'),
                type: "POST",
                data: {form: $('#'+formId).serializeArray()},
            });                      
        }
        else
        {
            $.each( resultArray, function( key, value ) {               
                $( "div#"+key+"_validation" ).text(value);              
            });
        }
    }); 

    return false; //all the time
}