Я бы вызвал ответ JSON, содержащий какой-то код ошибки.Чтобы обработать его, вам нужно определить fnServerData, как вы и предполагали.Тем не менее, я бы настоятельно рассмотрел вариант использования перед использованием обратного вызова с ошибкой по этой причине:
Ошибка - это просто любая проблема при извлечении ресурса и использовании кодов состояния.Допустим, сеанс завершается на сервере.Пользователь запрашивает данные, сервер отправляет обратно 500 ошибок.Ошибка обратного вызова говорит: «Ну, это отстой. Давайте перенаправим на страницу входа».Все отлично работает.
Однако ... пользователь делает запрос.По какой-то причине запрос занимает немного времени (большой набор данных, состояние сети).Тем временем пользователь решает перейти на другую страницу, прерывая цикл ответа на вызов.При отсутствии ответа обратный вызов ошибки отключается, и пользователь перенаправляется на страницу входа (или любую другую функцию, установленную в обратном вызове ошибки).
Проблема в том, что нет кода состояния, о котором я знаю(Хотелось бы знать, хотя! Я не против, чтобы я ошибался здесь!), Поскольку «сессия истекла», чтобы получить и обработать.
Я не говорю, что вы «не должны»или "не могу" использовать ошибку обратного вызова.Но функция должна учитывать ошибки, отличные от истечения сеанса.Возможно, вам придется начать обработку по-разному в зависимости от кодов состояния.Если ваша функция элегантно обрабатывает все эти случаи, прекрасно!В одном приложении мы действительно перенаправляем на страницу входа в систему, и функция обратного вызова с ошибкой часто срабатывает из-за ложного срабатывания, неправильно выкидывающего пользователя на страницу входа.В случае «сеанса истек» мы перехватываем его в обратном вызове успеха через сообщение JSON.
[обновлено после превосходных комментариев Дэйва:] Если ваш сервер возвращает полезную ошибку сервера (401, 403,550 или что-то еще, что имеет смысл в вашем сценарии), тогда использование fnServerData с параметром statusCode в вызове .ajax () (это полный рот!) Будет работать так же хорошо.Я думаю, что это тот же объем работы: вернуть JSON с помощью метода, который вы уже написали, или вернуть ошибку состояния с помощью методов, к которым у вас уже должен быть доступ.Выберите, какой из них имеет смысл для вас.