在Ajax中显示Zend表单验证错误

时间:2014-08-18 20:59:57

标签: php jquery ajax zend-framework2

有Zend注册表。输入用户名,电子邮件,密码和确认密码。电子邮件的确认者如下:

    $this->add(array(
        'name' => 'email_reg',
        'required' => true,
        'filters' => array(
            array(
                'name' => 'StripTags',
            ),
            array(
                'name' => 'StringTrim',
            ),
        ),
        'validators' => array(
            array(
            'name' => 'EmailAddress',
            'options' => array(
                'domain' => true,
                'messages' => array(
                        \Zend\Validator\EmailAddress::INVALID_FORMAT => 'Email address format is invalid'
                    ),
                ),
            ),
            array(
                'name'    => 'Db\NoRecordExists',
                'options' => array(
                    'table' => 'user',
                    'field' => 'email',
                    'adapter' =>  $sm->get ( 'Zend\Db\Adapter\Adapter' ),
                    'messages' => array(
                    NoRecordExists::ERROR_RECORD_FOUND => 'E-mail address already exists'
                    ),
                ),
            ),
        ),
    ));

有4个验证器:必需类型,电子邮件格式以及是否有人在数据库中有以下电子邮件。 错误消息将是: - 需要电子邮件 - 电子邮件地址格式无效 - 电子邮件地址已存在

问题尝试使用ajax捕获错误消息和输出。在具有以下功能的RegisterController中:

public function ajaxAction()
{
    if (!$this->request->isPost()) {
        return $this->redirect()->toRoute(NULL,
            array( 'controller' => 'index'
            )
        );
    }

    $form = $this->getServiceLocator()->get('RegisterForm');
    $form->setInputFilter(new RegisterFilter($this->getServiceLocator()));  
    $post = $this->request->getPost();
    $form->setData($post);
    $response   = $this->getResponse();
    $hello = 1;
    if (!$form->isValid()){
        // email is invalid; print the reasons
        $json= $form->getMessages();
        $response->setContent(\Zend\Json\Json::encode($json));
    }
    return $response;
}

和jQuery文件:

$( document ).ready(function() {
         var urlform = "register/ajax";
    $("#btnRegister").click( function() {
        $("#Register").submit( function() {
           return false;    
        });
        $.ajax({
            url: urlform,
            type: 'POST',
            dataType: 'json',
            async: true,
            data: $(".form-signin").serialize(),
            success: function (data) {
                $("#rCheck").text(data);
                console.log(data);
            },
            error: function (data) {
                $("#rCheck").text(data);
                console.log(data);
            }
        }); 
    });
});

在控制台中,我得到类似https://imagizer.imageshack.us/v2/558x205q90/661/uC09Da.png的内容,并在id为#rCheck的div中获取[Object] [Object]。

1 个答案:

答案 0 :(得分:0)

从您提供的图像中正确返回错误消息。错误在于您尝试直接将Object写入div

您应该已经了解了如何使用JavaScript读取对象。试试这段代码:

success: function (data) {
            data.forEach(function(datum) {
               Object.keys(datum).forEach(function (key) {
                $('<p>'+obj[key]+'</p>').appendTo('#rCheck');
                });
            });
            console.log(data);
        },

或者您也可以在ajaxAction

中执行此操作
$messages = array();
$errors = $form->getMessages();
foreach($errors as $key=>$row)
{
    if (!empty($row) && $key != 'submit') {
        foreach($row as $keyer => $rower)
        {
            $messages[$key][] = $rower;    
        }
    }
}
if (!empty($messages)){ 
$response->setContent(\Zend\Json\Json::encode($messages));
}
return $response;       

对于如何使用Zend\Form进行Ajax验证,这里是一个很好的post

希望这可以提供帮助。