Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Перенаправление на актуальную страницу в ответ на запрос ajax

Автор вопроса: Richard HОтветов: 1

У нас есть приложение с отслеживанием состояния. Когда пользователь неактивен в течение некоторого времени, время сеанса истекает, а кэшированные данные/объекты уничтожаются.

У нас есть фильтр запросов, который проверяет сеанс перед обработкой запроса. Если сеанс нулевой, мы возвращаем перенаправление на страницу входа. Это отлично работает для обычных запросов, отличных от XHR.

Но как нам быть с запросами XHR? Насколько я понимаю, выдача перенаправления на запрос XHR будет просто означать, что html страницы входа возвращается в ответ на запрос XHR, что, очевидно, не является желаемым поведением!

Как мы можем выполнить фактическое перенаправление страницы в этом случае? Если это невозможно, то какие есть альтернативы? Я предполагаю, что многие приложения должны иметь дело с этим.

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

  • Рассматривали ли вы возможность вернуть ответ 401? Nic 24.08.2011

xmlhttprequestweb-applicationsajaxredirect

Ответы

Ответ 1 · рейтинг 1 · emboss

Во-первых, вам, вероятно, нужно различать фактические запросы браузера и Ajax-запросы. Некоторые фреймворки уже добавляют свой собственный заголовок, если ваш нет, то вы можете дополнительно добавить такой заголовок "X-Requested-With", чтобы иметь возможность сказать.

Затем перенаправьте запросы браузера непосредственно на страницу входа. Для запросов Ajax вы должны создать файл 401 Unauthorized.

Хотя вы говорите, что фреймворк обрабатывает большую часть вашего кода Ajax, он все равно должен предлагать вам возможность подключиться, когда дело доходит до обработки кодов состояния ошибки (иначе я бы подумал о переходе на другой фреймворк :).

В этой процедуре обратного вызова вы можете выполнить перенаправление на стороне Javascript/клиента, используя window.location=....

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы