Laravel: получен ответ об ошибке от контроллера, но на консоли отображается сообщение об ошибке, а ответное сообщение не отображается - PullRequest
0 голосов
/ 02 ноября 2018

В моем проекте laravel я пытаюсь получить ответ об ошибке от контроллера и показать на странице просмотра. Я добавил функциональные возможности, но я получаю TypeError в jquery. Когда я печатаю данные ответа на консоли, в консоли отображается сообщение ответа. Здесь я добавил 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 (данные). На консоли отклик показывает

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 голосов
/ 02 ноября 2018

Вот рабочая скрипка: Скрипка .
Проблема в итерации объекта JSON

var errors = 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>
* * Тысяча двадцать-одина;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...