Как вы справляетесь с AJAX-запросами, когда пользовательский сеанс истекает, или когда запрос заканчивается 302 - PullRequest
1 голос
/ 13 июня 2011

Были заданы и другие подобные вопросы, но они не были склонны иметь дело с универсальным многоцелевым решением.Они, как правило, имели дело только с проблемами аутентификации пользователей.Иногда 302 действителен для других обстоятельств.

Итак, как вы можете создать универсальный обработчик 302 для запросов ajax, сохраняя при этом функциональность для всего остального в вашем приложении?

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Решение, которое мы придумали в конце, было немного хакерским, но, кажется, довольно изящным.

Начните с перехвата любых 302-х, которые приходят из запроса ajax в вашем файле global.asax.*

Мы изобрели код состояния 308, чтобы браузер не перехватывал 302 и не вызывал сбой jquery.

А затем где-нибудь в вашем глобальном файле javascript добавьте следующее

$(document).ajaxError(function (e, request, errorThrown, exception) {
    if (request.status == "308") {
        window.location = request.getResponseHeader('location');
    }
});

Это позволяет jquery обнаруживать перенаправление, а затем направлять пользователя на запрошенную страницу.

0 голосов
/ 13 июня 2011

Кажется, вы можете просто добавить условие для проверки этого конкретного статуса. Если request - это ваш объект XMLHttpRequest, то дополнительно проверьте состояние, когда readyState равен 4:

if(request.readyState == 4){
  if(request.status == 302) {
    doSomething();
  }
  else {
    doSomethingElse();
  }
}

редактирование:

или, альтернативно, если вы не хотите использовать прямой javascript (поскольку, честно говоря, вы отметили его как jquery-ajax), тогда что-то вроде этого:

$.ajax({
  statusCode: {
    302: function() {
      doSomething();
    }
  }
});
...