Как принудительно вернуть HTTP-ответ на AJAX-запрос в laravel - PullRequest
0 голосов
/ 10 февраля 2019

Я использую jQuery для быстрого создания одностраничных приложений с Laravel шаблонами.Например, обновление только раздела #content веб-страницы при нажатии кнопки (ссылки) на боковой панели панели администратора.

Обычно я добавляю обратные вызовы success и error в свой запрос как таковые.

        $.ajax({
            url: url,
            type: "POST",
            data: data,
            success:function(data){
        },
        error:function(xhr, status, error) {
               //Error msg for Developers
               $('body').html('');
               $('body').prepend(xhr.responseText);
               $('body').append('XHR :'+xhr);
               $('body').append('STATUS :'+status);
               $('body').append('ERROR :'+error);
               // for users
               // $('.infoMsg').html("OOPS SOMETHING BAD HAPPENED!");
               // $('#infoModal').modal();


           }
       });

В более ранних версиях Laravel например, 5.4 JS внутри функции ошибок обычно отображал ошибки из бэкэнда так же, как обычные ответы HTTP (обычная веб-страница).В то время, я полагаю, разработчики должны были преднамеренно ответить на вопрос, какой ответ требуется отправить обратно, и по умолчанию был HTTP.Так что, если бы была ошибка на бэкэнде, я бы увидел что-то вроде этого (хотя это 5.7)

enter image description here

Так в чем здесь проблема!Проблема здесь с 5.6 и выше. Я думаю, что Laravel может определить тип запроса и отправляет ответы в соответствующем формате, в зависимости от типа запроса.В этом случае он возвращает ответы JSON для моих запросов AJAX.Так что теперь, когда есть и ошибка в бэкэнде, я бы увидел что-то вроде этого

enter image description here

Наличие ошибок, отображаемых таким грязным способом, усложняет для меняотладить или даже понять ошибку!Я знаю, что возможно, чтобы JSON выглядел лучше, но я хочу знать, возможно ли (и на самом деле хорошее решение) для меня просто заставить Laravel возвращать HTTP-ответ независимо от того, как это было в предыдущих версиях?

При работе с GET запросами, если при получении маршрута и ошибки из бэкэнда при посещении маршрута, например, list/products, простой способ отладки - просто перейти по URL-адресу из адресной строки и получить ошибку вФормат HTTP напрямую, однако при работе с запросом POST это не так.На самом деле это не «программная ошибка» или что-то в этом роде, а поиск удобного способа отладки проблем AJAX с помощью Laravel.Я хотел бы получить мое "хорошее старое поведение laravel" Спасибо!

1 Ответ

0 голосов
/ 10 февраля 2019

Если все, что вам нужно, это удобный способ отладки исключений, я мог бы предложить https://github.com/barryvdh/laravel-debugbar

Если вы действительно хотите вызвать симпатичный ответ об ошибке "К сожалению" из вашегоНа первом снимке экрана для всех исключений ajax вы можете заменить метод \App\Exceptions\Handler::render кодом из его родительского класса , изменив это:

return $request->expectsJson()
                    ? $this->prepareJsonResponse($request, $e)
                    : $this->prepareResponse($request, $e);

на следующее:

return $this->prepareResponse($request, $e);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...