Laravel:从控制器获取错误响应,但在控制台上键入错误,并且响应消息未显示在视图页面上

时间:2018-11-02 04:57:47

标签: javascript jquery laravel-5 laravel-5.5

在我的laravel项目中,我试图从控制器获取错误响应并显示在我的视图页面上。我已经添加了功能,但是在jQuery中得到了TypeError。当我在控制台上打印响应数据时,显示控制台中响应消息。在这里,我添加了jquery,来自控制器和控制台消息的响应。任何帮助将不胜感激。

jquery

$.ajax({
       type: "POST",
       url: url,
       data: $("form").serialize() + '&' + $.param({'formPart': $btn.val()}),
       dataType: 'JSON'
       })
         .done(function (data){
           $btn.button('reset');
           if (data.response === 'success') {
                window.location.href = '/test/url';
           }
       })
         .fail(function(data, jqxhr, textStatus, error) {
           if( data.status === 422 ) {
              console.log(data);
              var errors       = data.responseJSON.error;
              var bookingOrder = data.responseJSON.bookingOrder;
              if(errors) {
                $( "#errors_"+bookingOrder ).show();

                errorsHtml = '<div class="alert alert-danger"><ul>';
                $.each( errors , function( key, value ) {
                  errorsHtml += '<li>' + value + '</li>';
                });
                errorsHtml += '</ul></div>';

                $( "#errors_"+bookingOrder ).html( errorsHtml );
              }
              else {
                    var errData = data.responseJSON;

                    $.each(errData, function (i, item) {
                    var spliKey = i.split('.');
                    var fname   = spliKey[0];
                    $('input[name^="' + fname + '" ]').each(function (k, v) 
                    {
                     if (spliKey[1] == k) {
                       $(this).parent('.form-group').children('.help-block').html('<strong>' + item[0] + '</strong>');
                       $(this).parent('.form-group').addClass('has-error');
                      }
                    });
                     $('select[name^="' + fname + '" ]').each(function (k, v) {
                      if (spliKey[1] == k) {
                         $(this).parent('.form-group').children('.help-block').html('<strong>' + item[0] + '</strong>');
                         $(this).parent('.form-group').addClass('has-error');
                       }
                     });
                 });

                  $btn.button('reset');
             }
          }
       });

来自laravel控制器的响应

if($monthBegin < $monthEnd) {
   $test[] = $dateDifference->days;
}
else {
      return response()->json(['error' => 'Arrival date should be less than departure date', 'bookingOrder' => 2], 422);
     }

控制台 当我打印console.log(data)时。在控制台上显示响应

responseJSON: Object { error: "Arrival date should be less than departure date.", bookingOrder: 2 }

responseText: "{\"error\":\"Arrival date should be less than departure date.\",\"bookingOrder\":2}"

控制台中显示错误

TypeError: cannot use 'in' operator to search for 'length' in 'Arrival date sho...'

1 个答案:

答案 0 :(得分:1)

这是工作中的小提琴:Fiddle
问题在于迭代JSON对象

  

var错误= data.responseJSON.error;

您正在尝试迭代一个不是对象的值,因此将其修改为

  

var errors = data.responseJSON

$(document).ready(function(){
var data ='{"responseJSON":{"error":"Arrival date should be less than departure date.","bookingOrder":2}}';
var jsonData = JSON.parse(data);
console.log(jsonData.responseJSON.error);
var errors  = jsonData.responseJSON;
              var bookingOrder = jsonData.responseJSON.bookingOrder;
              if(errors) {
                

                errorsHtml = '<div class="alert alert-danger"><ul>';
                $.each( errors , function( key, value ) {
                  $("#errors").append(value);
                });
               
              }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="errors">

</div>

;

相关问题