Итак, я заметил, что с последней версии 5.6 Laravel возвращает серверные исключения в формате json вместо html при обработке запросов ajax POST.Это реальная проблема для моей разработанной логики отладки из предыдущей версии, так как я рассчитывал, что laravel вернет отображаемую HTML-страницу ошибки как .responseText
ответа, поэтому я мог легко отобразить весь контент в новойокно и ясно видеть (для целей отладки).В настоящее время происходит следующее:
.$ajax()
POST-запрос отправляется на сервер; - возникает некоторая ошибка php на стороне сервера в функции, обрабатывающей ответ (скажем, неизвестныйпеременная, например)
- , поэтому функция запроса ajax
error
получает свой первый аргумент (xhr
), который на данный момент является массивом JSON со следующей структурой: - теперь я хотел бы отобразить это сообщение в новом окне, но с отображаемым макетом HTML, который обычно предоставляет Laravel, и мне действительно нравится
Я бы действительно не хотелЯ не хочу начинать создавать внешний вид html самостоятельно, когда я уже знаю, что Laravel может сделать это для меня.Проблема в том, что я не смог найти недавнюю документацию по теме, а также не мог найти правильный способ вернуть визуализированный HTML-контент в качестве ответа.Итак, мой вопрос, может ли кто-нибудь посоветовать мне, как лучше всего сделать HTML-контент?Какой метод является лучшим способом получить то, что я хочу, и есть ли еще какой-то конкретный такой метод?Заранее спасибо!
Редактировать Вот мой запрос ajax:
$.ajax({
method: "POST",
url: '/updateModel',
data: dataObject,
success: success
});
Где dataObject
- это действительно только содержащиеся данные для запроса.В моем исходном файле .js
есть следующее:
$(function () {
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$(document).ajaxStart(function() {
showGlobalLoader(true); //shows the loader
})
.ajaxStop(function() {
showGlobalLoader(false); //hides the loader
})
.ajaxError(ajaxErrorGlobalFunction); //displays the new window - that's the function in question
});
И затем это функция ajaxErrorGlobalFunction
function ajaxErrorGlobalFunction(xhr, status, error) {
if (xhr.responseText) {
//console.log(xhr.responseText);
openErrorWindow(xhr.responseJSON);
}
}
function openErrorWindow(json = "")
{
var w = window.open('', '_blank', 'scrollbars=no,status=no,titlebar=no');
$(w.document.body).html(json.message + "\n in file " + json.file + "\n on line " + json.line);
w.resizeTo(1000, 1000);
w.moveTo(0, 0);
w.focus();
}
Как видите, я использовалпросто отобразить xhr.responseText
как html-содержимое окна, но теперь я вынужден был обойти его, извлекая наиболее важную информацию из json.Я действительно хотел бы получить старый добрый HTML-контент в ответ на запрос.Заранее спасибо!