【问题标题】:Undefined Response For Ajax Request With Validation Errors Form带有验证错误表单的 Ajax 请求的未定义响应
【发布时间】:2018-09-13 04:18:17
【问题描述】:

表单验证错误的响应未定义

控制器方法处理请求并使用 json 响应将验证错误存储或发送回客户端

  public function store(Request $request)
    {
        $validator =  $this->validate(request(), [
            'title' => 'required',
            'body' =>  'required'
          ]);

          if($validator->fails()) {
            return response()->json(['success' => false, 'error' => $validator->errors()->toArray()]);
          } else {
            $report = new Report;
            $report->name = 'username';
            $report->phone = '012345679';
            $report->title = $request->title;
            $report->body =  $request->body;
            $result = $report->save();
            return response()->json(['success' => true, 'message' => 'your report has been sent successfuly']);
          }
    }

如果点击了按钮但没有选中单选按钮或正文未填充消息正文,laravel 验证错误必须显示给用户,但它给了我未定义的消息

jQuery(document).on('ready', function() {

    $('#sendrepo').click(function (e) {

                e.preventDefault();
                var selected = $('input[type="radio"]:checked');

                var title = selected.val();
                var body = $('textarea#repobdy').val();
                var url = 'api/report';

                $.ajaxSetup({
                    headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    }
                });

                $.ajax({
                        type: "POST",
                        url: url,
                        data: { title: title, body: body  },
                        success: function(data){
                            $('#repo-fel').remove();
                            $('.tg-formtheme h3').remove();
                            $('.repo-message').append('<div class="alert alert-danger"><strong>'+ data.message +'</strong></div>');
                        },
                        error: function( data){
                            $('.repo-message').append('<ul><li>'+ data.errors +'</li></ul>');
                        }

                });

 });

【问题讨论】:

    标签: jquery ajax laravel


    【解决方案1】:
    $.ajax({
                type: "POST",
                url: url,
                data: { title: title, body: body  },
                success: function(data){
                    if (data.success) {
                        $('#repo-fel').remove();
                        $('.tg-formtheme h3').remove();
                        $('.repo-message').append('<div class="alert alert-danger"><strong>'+ data.message +'</strong></div>');
                    }
                },
                error: function(data) {
                    var errors = data.responseJSON;
                    $.each(errors, function(i, v){
                        $('.repo-message').append('<ul><li>'+ v +'</li></ul>');
                    });
                }
    
            });
    

    希望对你有帮助。

    【讨论】:

    • 我已经删除了成功的真/假和它返回未定义消息的相同结果
    • 我也这样做了,没有验证错误只显示未定义的消息,我只需要向用户显示 laravel 验证错误
    • 生成错误时是否未定义?因为我试过这段代码而且效果很好,当验证失败时。
    • 很高兴听到。我已将答案编辑为正确的解决方案。
    • 我已经在下面回答了,我会用完整的解释编辑它,谢谢你的帮助
    【解决方案2】:

    直接不使用 $validator->fails() ,错误会自动响应

    public function store(Request $request)
            {
                $validator =  $this->validate(request(), [
                    'title' => 'required',
                    'body' =>  'required'
                  ]);
    
                    $report = new Report;
                    $report->name = 'username';
                    $report->phone = '012345679';
                    $report->title = $request->title;
                    $report->body =  $request->body;
                    $result = $report->save();
                    return response()->json(['message' => 'your report has been sent successfuly']);
                  }
            }
    

    答案是必须对数据进行 responseJSON 并对其进行迭代

    $.ajax({
                type: "POST",
                url: url,
                data: { title: title, body: body  },
                success: function(data){
                    if (data.success) {
                        $('#repo-fel').remove();
                        $('.tg-formtheme h3').remove();
                        $('.repo-message').append('<div class="alert alert-danger"><strong>'+ data.message +'</strong></div>');
                    }
                },
                error: function(data) {
                    var errors = data.responseJSON;
                    $.each(errors.errors, function(i, v){
                        $('.repo-message').append('<ul><li>'+ v +'</li></ul>');
                    });
                }
    
            });
    

    【讨论】:

      【解决方案3】:

      我现在无法对此进行测试,所以如果我不正确,请忽略我的答案,但在验证器上我从不将用户请求作为函数,你可以尝试这样的事情,看看它是否返回正确的错误:

      $validator =  $this->validate($request, [
              'title' => 'required',
              'body' =>  'required'
            ]);
      

      【讨论】:

      • 您可以查看 laracast.com 进行验证
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-17
      • 2022-01-04
      相关资源
      最近更新 更多