Php 重新提交后,AJAX再次验证所有字段

Php 重新提交后,AJAX再次验证所有字段,php,jquery,ajax,json,codeigniter,Php,Jquery,Ajax,Json,Codeigniter,我有一个注册表,由CodeIgniter的验证助手处理。如果表单验证返回false,它将以JSON对象的形式返回错误 到目前为止,代码运行得还不错,但每次我尝试使用不同的详细信息重新提交表单时,它只是不断地将相同的错误添加到彼此的顶部,如果我为输入字段键入了正确的值,它不会删除这些错误消息 我需要做的,实际上是在每次按下提交按钮时重新验证表单 这是我现在拥有的 AJAX部分: $(document).ready(function() { $("form#signup").on('sub

我有一个注册表,由CodeIgniter的验证助手处理。如果表单验证返回false,它将以JSON对象的形式返回错误

到目前为止,代码运行得还不错,但每次我尝试使用不同的详细信息重新提交表单时,它只是不断地将相同的错误添加到彼此的顶部,如果我为输入字段键入了正确的值,它不会删除这些错误消息

我需要做的,实际上是在每次按下提交按钮时重新验证表单

这是我现在拥有的

AJAX部分:

$(document).ready(function() {

    $("form#signup").on('submit', function(e) {
        var from = $(this);

        $.ajax({
            url: from.attr('action'),
            type: from.attr('method'),
            data: $(from).serialize(),
            dataType: 'json',
            success: function(data) {
                if(data.st == 0) {
                    for(var key in data.msg) {
                        // Add class and label with error message after input field 
                        $("form#signup input#" + key).addClass("input-error");
                        $("form#signup input#" + key).after("<label class='error'>" + data.msg[key] +"</label>");
                    }   
                    // Shake the register button
                    $("input#register").shake_it();
                } else {
                    alert("It works!");
                }
            }
        });
        e.preventDefault();
    });
});
if($this->form_validation->run() == FALSE) {    
    // If validation returns false, return errors as JSON
    $this->output->set_content_type('application_json');
    $this->output->set_output(json_encode(array('st' => 0, 'msg' => $this->form_validation->error_array())));
    return false;
} else {
    // Continue register process
}

您可以删除函数开头的错误消息:

$("form#signup").on('submit', function(e) {
    var from = $(this);

    $("form#signup input.input-error").removeClass("input-error")
                                      .nextAll(".error")
                                      .remove();

    //Ajax call
});

在添加新类之前,应该先删除上一个类。所以加上

$("form#signup input#" + key).removeClass("input-error");
以前

$("form#signup input#" + key).addClass("input-error");
这将删除旧错误并为每次提交添加新的错误消息(如果有)

$("form#signup").on('submit', function(e) {
    $("form#signup input").removeClass('input-error'); // REMOVES input-error class from input fields
    $(".error").remove(); // Removes all error-spans from form.
    var from = $(this);
    ...
    ...
第2行和第3行将删除以前验证中的错误,然后再次运行验证