2010-03-04 3 views
4

Позвольте мне начать с использования в реальной жизни дела:Как вы можете реализовать шаблон перехватчика на стороне запроса/ответа AJAX на стороне клиента (браузера)?

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

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

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

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

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

ответ

0

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

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

... и т. Д. Не совсем «изначально», но относительно чистый из jQuery.