jquery ajax-php:错误消息未显示在它后面的其他空输入字段上';更新

jquery ajax-php:错误消息未显示在它后面的其他空输入字段上';更新,php,jquery,ajax,Php,Jquery,Ajax,我正在尝试使用jquery和ajax为我的注册表验证post数据,其中每个输入字段下面都会显示一条错误消息。我最初设法得到了错误消息。但是,当使用输入更新某些空字段时,错误消息不会显示在剩余的空字段中。请有人指出,如果有任何问题,下面的脚本 <script type="text/javascript"> $(document).ready(function(){ $('#reg-form').submit(function(event){ // stop re

我正在尝试使用jquery和ajax为我的注册表验证post数据,其中每个输入字段下面都会显示一条错误消息。我最初设法得到了错误消息。但是,当使用输入更新某些空字段时,错误消息不会显示在剩余的空字段中。请有人指出,如果有任何问题,下面的脚本

<script type="text/javascript">
$(document).ready(function(){
    $('#reg-form').submit(function(event){
        // stop refreshing the page
        event.preventDefault();

        $('.reg_form').removeClass('has-error'); // remove the error class
        $('.localError').remove(); // remove the error text     
        $('#response').html("<b>Processing your info..</b>");

        var formMessages = $('#response');
        var form = $('#reg-form');
        var formData = $(this).serialize();

        $.ajax({
            type: 'POST',
            url: $(form).attr('action'),
            data: formData,
            dataType: 'JSON'

        })

        .done(function(data){

            // log data to the console
            console.log(data); 

            if (data !== '') {
                // handle errors for username
                if (data.username) {
                    $('#username-div').addClass('has-error'); // add the error class to show red input
                    $('#username-div').append('<div class="localError">' + data.username + '</div>'); // add the actual error message under our input
                }

                // handle errors for password ---------------
                if (data.password) {
                    $('#password-div').addClass('has-error'); // add the error class to show red input
                    $('#password-div').append('<div class="localError">' + data.password + '</div>'); // add the actual error message under our input
                }

                // handle errors for conf_pass ---------------
                if (data.conf_pass) {
                    $('#conf_pass-div').addClass('has-error'); // add the error class to show red input
                    $('#conf_pass-div').append('<div class="localError">' + data.conf_pass + '</div>'); // add the actual error message under our input
                }

            }
            else {
                //Turn the response alert into a success alert
                $('#response').addClass('alert-success');
                $('#response').removeClass('alert-error');
                //Add the success message text into the alert
                $('#response').html("<i class='success'></i> Form validated successfully!").fadeIn();
            }

        })

        .fail(function() {
            // just in case posting your form failed
            alert( "Error.." );

        });  
        return false;

    });
});
</script>

$(文档).ready(函数(){
$(“#注册表格”)。提交(功能(事件){
//停止刷新页面
event.preventDefault();
$('.reg_form').removeClass('has-error');//删除错误类
$('.localError').remove();//删除错误文本
$('#response').html(“处理您的信息…”);
var formMessages=$(“#响应”);
变量形式=$(“#注册表形式”);
var formData=$(this.serialize();
$.ajax({
键入:“POST”,
url:$(form.attr('action'),
数据:formData,
数据类型:“JSON”
})
.完成(功能(数据){
//将数据记录到控制台
控制台日志(数据);
如果(数据!=''){
//处理用户名的错误
if(data.username){
$('#username div').addClass('has-error');//添加error类以显示红色输入
$('#username div').append(''+data.username+'');//在输入下添加实际的错误消息
}
//处理密码错误---------------
if(data.password){
$('#password div').addClass('has-error');//添加error类以显示红色输入
$('#password div').append(''+data.password+'');//在输入下添加实际的错误消息
}
//处理conf_pass的错误---------------
if(data.conf_pass){
$('#conf_pass-div').addClass('has-error');//添加error类以显示红色输入
$('#conf_pass-div').append(''+data.conf_pass+'')//在输入下添加实际的错误消息
}
}
否则{
//将响应警报转换为成功警报
$('#response').addClass('alert-success');
$('#response').removeClass('alert-error');
//将成功消息文本添加到警报中
$('#response').html(“表单验证成功!”).fadeIn();
}
})
.fail(函数(){
//以防你的表格发布失败
警报(“错误”);
});  
返回false;
});
});
regsiter.php

<div id="reg">
        <!-- where the response will be displayed -->
        <div id='response'></div>&nbsp;

        <form action="register-handler.php" method="POST" id="reg-form">
            <div id='username-div' class='reg_form'>
            <label for="username" >Username:</label></br>               
            <input type="text" name="username" id="username"  autocomplete="off">&nbsp;
            </div>&nbsp;

            <div id='password-div' class='reg_form'>
            <label for="password" >Password:</label></br>
            <input type="password" name="password" id="password" >&nbsp;
            </div>&nbsp;

            <div id='conf_pass-div' class='reg_form'>
            <label for="conf_pass" >Confirm Password:<label></br>
            <input type="password" name="conf_pass" id="conf_pass" >&nbsp;
            </div>&nbsp;

            <div></div>
            <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
            <input type="submit" value="submit"></td>

        </form>
    </div>

用户名:
密码:
确认密码:
validate.php

<?php
class Validate {
    private $_passed = false,
            $_errors = array()

    public function check($source, $items = array()) {
        foreach ($items as $item => $rules) {
            foreach ($rules as $rule => $rule_value) {

                $value = trim($source[$item]);
                $item = escape($item);

                if ($rule === 'required' && empty($value)) {
                    $this->addError($item, "{$item} is empty");
                } else if (!empty($value)) {
                    switch ($rule) {
                        case 'min':
                            if (strlen($value) < $rule_value) {
                                $this->addError($item, "{$item} must be a minimum of {$rule_value} characters.");
                            }
                            break;
                        case 'max':
                            if (strlen($value) > $rule_value) {
                                $this->addError($item, "{$item} must be a maximum of {$rule_value} characters.");
                            }
                            break;
                        case 'matches':
                            if ($value != $source[$rule_value]) {
                            $this->addError($item, "{$rule_value} must match {$item}");
                            }
                            break;                  
                    }
                }
            }

        }
        if (empty($this->_errors)) {
            $this->_passed = true;
        }
        return $this;
    }

    private function addError($key, $error) {
        $this->_errors[$key] = $error;
    }

    public function errors() {
        return $this->_errors;
    }   

    public function passed() {
        return $this->_passed;
    }
}
?>


您在validationhi中使用的php代码,Islam Zedan。我已经包含了从phpacademy教程中编辑的相关php代码。有什么评论吗?
<?php
class Validate {
    private $_passed = false,
            $_errors = array()

    public function check($source, $items = array()) {
        foreach ($items as $item => $rules) {
            foreach ($rules as $rule => $rule_value) {

                $value = trim($source[$item]);
                $item = escape($item);

                if ($rule === 'required' && empty($value)) {
                    $this->addError($item, "{$item} is empty");
                } else if (!empty($value)) {
                    switch ($rule) {
                        case 'min':
                            if (strlen($value) < $rule_value) {
                                $this->addError($item, "{$item} must be a minimum of {$rule_value} characters.");
                            }
                            break;
                        case 'max':
                            if (strlen($value) > $rule_value) {
                                $this->addError($item, "{$item} must be a maximum of {$rule_value} characters.");
                            }
                            break;
                        case 'matches':
                            if ($value != $source[$rule_value]) {
                            $this->addError($item, "{$rule_value} must match {$item}");
                            }
                            break;                  
                    }
                }
            }

        }
        if (empty($this->_errors)) {
            $this->_passed = true;
        }
        return $this;
    }

    private function addError($key, $error) {
        $this->_errors[$key] = $error;
    }

    public function errors() {
        return $this->_errors;
    }   

    public function passed() {
        return $this->_passed;
    }
}
?>