如何在屏幕上显示带有附加的数据的验证错误消息?

Posted

技术标签:

【中文标题】如何在屏幕上显示带有附加的数据的验证错误消息?【英文标题】:How to show the validation error message of a data on the screen with append? 【发布时间】:2021-05-26 22:10:13 【问题描述】:

我正在尝试如下图所示将数据错误插入表单所造成的错误。

但是,它只有在正确输入数据时才有效。例如,它应该显示“无效的 CPF”。

javascript 代码:

$("#formCadastro").on("submit", function (event) 
    event.preventDefault();
    var dados = $(this).serialize();

    $.ajax(
        url: getRoot() + 'controllers/controllerCadastro',
        type: "POST",
        dataType: "json",
        data: dados,
        success: function (xhr) 
            $(".retornoCad").empty();
            $(".retornoCad").append("Dados inseridos com sucesso!");
        ,
        error: function (xhr) 
            $(".retornoCad").empty();
            getCaptcha();
            $.each(xhr.response, function(key,value)
                $(".retornoCad").append(value + '<br>');
            );
            
        
    );
    
);

而用于验证的.php文件是:

    public function validateFinalCad($arrVar)
    
        if (count($this->getErro()) > 0) 
        
            $arrResponse = [
                // print_r($this->getErro())
                "retorno" => "erro",
                "erros" => print_r($this->getErro())
            ];
         else 
           $arrResponse = [
                // print_r($this->getErro())
                "retorno" => "success",
                "erros" => null
            ];
            /*$this->cadastro->insertCad($arrVar);*/
        
        return json_encode($arrResponse);
    

【问题讨论】:

error 回调只有在整个 HTTP 请求失败时才会运行(即它返回的状态码不是 200(或相关的,例如 201 等))。它不会因为您返回一些包含您认为指示验证错误的消息的 JSON 而出错。这不是 HTTP 错误。要么让 PHP 在出现验证错误时返回 400 Bad Request 响应,要么在“成功”中编写代码来检查 JSON 的内容并采取相应措施。 我改写成这样:success: function (xhr) $(".retornoCad").empty(); //$(".retornoCad").append("Dados inseridos com sucesso!"); if (xhr == 'erro') getCaptcha(); $.each(xhr.erros, function (key, value) $(".retornoCad").append(value + '&lt;br&gt;'); ); else $('.retornoCad').append('Dados inseridos com sucesso!'); 但只有 'Dados inseridos com sucesso!' (成功)出现。 if (xhr == 'erro') 永远不会为真,因为 xhr 是一个对象。它不是一个字符串。请改用if (xhr.retorno == "erro") 来测试对象中的特定值。 P.S.下次当您有一大段代码要向我们展示时,请使用问题下方的“编辑”按钮将其放入主要问题中。如您所见,当它在 cmets 中未格式化时,很难阅读它。谢谢。 $.each(xhr.erros 不会做太多事情,因为在您的 PHP 中,erros 要么是 null 要么是字符串(因为您使用了 print_r,它应该只是一个调试工具) . "erros" =&gt; $this-&gt;getErro() 会更好(假设getErro() 返回一个字符串数组)。 【参考方案1】:

只有在整个 HTTP 请求失败时才会运行错误回调(即它返回的状态码不是 200(或相关的,例如 201 等))。它不会因为您返回一些包含您认为指示验证错误的消息的 JSON 而出错。这不是 HTTP 错误。

要么

a) 使 PHP 在出现验证错误时返回 400 Bad Request 响应,或者

b) 在“成功”中编写代码以检查 JSON 的内容并采取相应措施。

例如这将完成选项 (b) 的工作:

success: function (xhr)              
  $(".retornoCad").empty();             
  if (xhr.retorno == 'erro') 
    getCaptcha();

    $.each(xhr.erros, function (key, value)                      
      $(".retornoCad").append(value + '<br>');
    );
   else 
    $('.retornoCad').append('Dados inseridos com sucesso!');             
           

另外,$.each(xhr.erros 不会做太多事情,因为在您的 PHP 中,erros 要么是 null,要么是字符串(因为您使用了 print_r,它应该只是一个调试工具)。 "erros" =&gt; $this-&gt;getErro() 会更好(假设getErro() 返回一个字符串数组)。

$arrResponse = [
    "retorno" => "erro",
    "erros" => $this->getErro()
];

【讨论】:

以上是关于如何在屏幕上显示带有附加的数据的验证错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

验证 php 表单 - 如何在表单上显示错误消息

php:如何重定向到带有错误消息的同一页面

jQuery 验证插件:如何创建自己的消息

当活动屏幕首次在 Android Studio 上加载时,如何在隐藏的背景中发送带有当前位置数据的 SMS 文本消息?

为最终用户处理 Flutter 上的 Firebase 身份验证错误

如何防止引导验证在表单提交之前显示错误消息?