Обработка ошибок HTTP 4nn / 5nn на стороне сервера, возвращающих весь документ HTML в запросах jQuery ajax

Кстати, как бы вы обрабатывали ошибки HTTP 4nn / 5nn на стороне сервера в запросах jQuery ajax? Этот случай касается веб-приложения JSP / Servlet на стороне сервера. Здесь я не говорю о тривиальных исключениях времени выполнения, таких какNullPointerException и так далее. Предположим, что они все обрабатываются отлично. Хорошим примером такой ошибки HTTP 4nn / 5nn является 401 несанкционированный (недостаточно прав пользователя) и 500 внутренняя ошибка сервера (база данных отключена, ошибка ввода-вывода,Errorс и т. д.). Предположим, что они не могут (или не должны) быть пойманы на уровне кодирования.

Прямо сейчас я только что объявил<error-page> вweb.xml за такие ошибки. Он в основном перенаправляет запрос на заранее определенную страницу ошибок JSP / HTML, на которой конечный пользователь информируется о том, что произошла серьезная ошибка и что пользователь может связаться с [email protected] для получения дополнительной помощи. На этой же странице отображаются общие сведения об ошибке / исключении.

Он отлично работает в обычных HTTP-запросах, но как бы вы справились с запросами XMLHtttp, используя jQuery? Что лучше для пользователя? Для меня это было бы просто отображением всей страницы ошибки, как если бы это был обычный HTTP-запрос. Я решил это следующим образом:

function init() {
    $.ajaxSetup({
        error: handleXhrError
    });
}

function handleXhrError(xhr) {
    document.open();
    document.write(xhr.responseText);
    document.close();
}

Хотя это работает отлично, я чувствую себя как взломать. Замена всего документа содержимым страницы ошибок HTTP. Но так ли вы будете следовать? Если нет, то можете ли вы уточнить, почему нет и каким способом вы бы предпочли? Единственная альтернатива, которую я вижу, - это использование JS для отображения некоторого окна предупреждения / сообщения, чтобы проинформировать пользователя о неразрешимой ошибке, но пользовательмог отклонить его и продолжить со страницы, пока это не должно быть возможно.

Ответы на вопрос(5)

Ваш ответ на вопрос