使用 laravel 5.4 返回验证的 json

Posted

技术标签:

【中文标题】使用 laravel 5.4 返回验证的 json【英文标题】:Return json of validations with laravel 5.4 【发布时间】:2018-06-13 02:14:17 【问题描述】:

我有以下请求 ajax:

$("#btnSave").click(function()
 
    var Url = 'http://localhost/Projetos-Laravel/Sibcomweb/public/panel/client/save';

    var Dados = $('#FormClient').serialize();

    $.ajax(
             type:'POST',
             url:Url,
             dataType: 'JSON',
             data: Dados,
             success:function(data)
                  if($.isEmptyObject(data.error))
                     alert(data.msg);
                  else
                     alert('have errors');
                    
                ,
                error:function(e)
                  alert('Error !');
                  log.console(e);

                ,
            );
        );

错误日志.console(e)

POST http://localhost/Projetos-Laravel/Sibcomweb/public/panel/client/save 500 (Internal Server Error)
send @ jquery.js:9566
ajax @ jquery.js:9173
(anonymous) @ create:431
dispatch @ jquery.js:5206
elemData.handle @ jquery.js:5014
create:446 Uncaught ReferenceError: log is not defined
    at Object.error (create:446)
    at fire (jquery.js:3317)
    at Object.fireWith [as rejectWith] (jquery.js:3447)
    at done (jquery.js:9274)
    at XMLHttpRequest.<anonymous> (jquery.js:9514)

请求 ajax 转到控制器但在验证方法中有一些错误...

我认为问题出在验证器方法中,我做错了什么吗?

public function store(Request $request)

    $dataForm = $request->all();

    $rules =[
    'name'=>'required|min:3|max:100',
    'number'=>'required|numeric',
    ];

    $valida = validator($dataForm, rules);
    if($valida->fails()) 
    
        return $valida;
    
    else
        return 'Ok';

我如何以 json 类型返回 var valida?

【问题讨论】:

在浏览器检查器中切换到网络面板,选择 ajax 调用的条目,然后查看 laravel 返回的错误。或者,查看 laravel.log 或您的网络服务器日志文件。 php 因某种原因崩溃,您需要准确找出原因。这样做的唯一方法是读取它返回的错误。 然而,另一部分是:未捕获的引用错误:未定义日志。正确的语法是 console.log(e);,而不是 log.console(e); 在导航的网络预览中显示此“类 Illuminate\Validation\Validator 的对象无法转换为字符串” 如果你在谷歌上搜索到这一点,你就更进一步了:***.com/questions/37260036/… 是的,那是因为您的 PHP 脚本崩溃了。由于您在上面发布的错误。由于数据未验证,因此不会返回该错误,这是一个实际的 PHP 错误。这意味着脚本在您修复代码之前无法运行。请参阅我上面的评论。谷歌如何修复您的“类 Illuminate\Validation\Validator 的对象无法转换为字符串”错误,或点击我评论中的链接到关于它的 SO-post。 【参考方案1】:

查看响应错误:

将您的回调函数更改为:

  error: function(e)
    var errors = e.responseJSON;
    alert(errors);
    // Render the errors with js ...
  

【讨论】:

【参考方案2】:

日志不是函数。将log.console 更改为console.log

【讨论】:

【参考方案3】:

有两个问题。 首先是:log.console(e),但是是 console.log(e)。 第二个问题是在controller中,return not的方法是正确的。

这样就对了:

public function store(Request $request)

    $dataForm = $request->all();

    $rules =[
    'name'=>'required|min:3|max:100',
    'number'=>'required|numeric',
    ];

    $valida = validator($dataForm, $rules);

    return response()->json(['error'=>$valida->errors()->all()]);

【讨论】:

以上是关于使用 laravel 5.4 返回验证的 json的主要内容,如果未能解决你的问题,请参考以下文章

laravel 5.4 中的 API 验证

Laravel 5.4 POST 到 API 重定向 302 而不是返回验证错误

Laravel 5.4,AJAX 应该不会出错

Laravel 5.4 有时验证规则不起作用

如何在 Laravel 5.4 中添加自定义用户提供程序

使用一张表 Laravel 5.4 进行多重身份验证