带有验证错误表的Ajax请求的未定义响应

时间:2018-04-03 18:27:14

标签: jquery ajax laravel

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

controller方法处理请求并使用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>');
                        }

                });

 });

3 个答案:

答案 0 :(得分:0)

$.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>');
                });
            }

        });

我希望有所帮助。

答案 1 :(得分:0)

直接没有$ validator-&gt; failed(),错误会自动响应

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>');
                });
            }

        });

答案 2 :(得分:0)

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

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