Как вы можете реализовать шаблон перехватчика на клиентских (браузерных) AJAX-парах запрос / ответ? - PullRequest
4 голосов
/ 04 марта 2010

Позвольте мне начать с реального варианта использования:

DWR сбивается с толку, когда фильтры аутентификации на стороне сервера пытаются перенаправить запросы AJAX на страницу входа из-за истекшего сеанса. Вы хотели бы добавить несколько фильтров, чтобы

  1. Запросы, чей код состояния HTTP равен 3xx , выполняют перенаправление на стороне клиента, например window.location = ... login.html
  2. Запрос, коды состояния которого равны 2xx , пересылаются - без изменений - любым зарегистрированным обработчикам, таким как DWR.
  3. Другие коды, такие как 4xx , могут вызывать оповещения, а не исчезать в пропасть.

Мне, вероятно, не нужно объяснять, почему этот тип функциональности был бы полезен; большинство серверных веб-фреймворков поддерживают шаблон перехватчика по тем же причинам, по которым вы можете захотеть использовать его на клиенте.

Одна (возможно, плохая) реализация может включать в себя обёртывание необработанного объекта XMLHttpRequest в прокси, который принимает некоторые функции фильтра. Поскольку jQuery, Prototype, ExtJS и т. Д. Уже обертывают объекты AJAX собственного браузера, это может быть еще одним дополнительным шагом.

Это это возможно реализовать нативно? Каковы технические проблемы? Было ли что-нибудь подобное сделано раньше?

1 Ответ

0 голосов
/ 24 января 2011

Я реализовал что-то, что частично достигает этого в среде jQuery.Функция jQuery AJAX, а также функции error и success имеют функцию complete.Таким образом, вы можете сделать что-то подобное для перехвата и перенаправления на основе возвращенного кода состояния:

complete:
    function() {
        if (data.status == 301 ||
            data.status == 302 ||
            // etc.
        ) {  
            location.replace('error.html')
        } 

... и т. Д.Не совсем "изначально", но относительно чисто изнутри jQuery.

...