当前位置: 首页 > 知识库问答 >
问题:

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

宋瀚海
2023-03-14

有一张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和div与id#rcheck获取[对象][对象]。

共有1个答案

祝叶五
2023-03-14

从您提供的图像中,错误消息将正确返回。错误是您试图直接将一个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验证结合使用的好文章。

希望这能有所帮助。

 类似资料:
  • 我试图让我的javascript验证电话号码输入,并在用户输入信息不正确时显示消息。我还设置了另外两个输入,所以我复制了其中一个,并用phoneNumber替换了名称,但没有结果。没有HTML的替代品,请它是我必须使用我的评估。 这里我只包含了电话号码输入的代码。http://jsfiddle.net/29ZNV/ 超文本标记语言 JAVASCRIPT

  • 我需要创建一个验证指令来自动显示每个输入的所有输入错误。此验证指令应该显示当前时刻的所有错误,错误列表应该在用户键入时自动更新。 链接到JSFiddle,带有一些用于测试的代码。 附言。UI-UTIL也有类似的功能,但它们的指令不能在一个地方设置类似的错误消息。

  • @将有效的打印信息发送到控制台,但不发送到页面 当我的字段有错误@Valid print info到控制台时,为什么不在第页? 字段hotelName上的对象formData中的字段错误:拒绝的值[];代码[Size.formData.hotelName, Size.hotelName, Size.java.lang.String, size];参数[org.springframework.con

  • 所以我想尝试在登录页面上显示“无效用户名或密码”的错误信息,每当用户得到他们是错误的。 到目前为止,我只是将它记录在控制台中,在那里我看到错误:“auth/invalce-email”,其消息属性是:“电子邮件地址格式化得很糟糕。”当输入错误的电子邮件时(密码也是如此)。有什么方法可以在我的singin组件的html中的ngIf div元素中显示这些(或者更确切地说是自定义消息“无效的用户名或密码

  • 问题内容: 如果我不想刷新页面,该如何在Codeigniter中进行表单验证?基本上我这样做: 但是,如果我使用ajax发送数据并且页面没有刷新,我该如何进行表单验证? 编辑: 谢谢@ Amra Kojon。很好并且可行,但是新的问题是: 如果我只是在其他部分说回声“某事”,它可以工作,并且如果验证还可以,则回声你好,但是如果我在数据库中写入主题(值数组中包含数据且不是ajax方式,则插入日期),

  • 我有一个简单的网络界面,在这里我可以为交易所的个人加密货币交易选择特定的市场、价格、目标和止损点。 我添加了一些默认的laravel验证规则,其中一些显示在Web界面上,就像它们应该的那样,但其中一个特别是在它确实触发时没有,因为当我检查错误时,它确实显示在响应中。 在这里,表单显示错误,除了在停顿部分,但停顿错误没有显示在网络界面上: 我已经简化了规则,只有“要求”用于测试目的,也有更多的规则它