4

让我从一个真实的用例开始:

当服务器端身份验证过滤器由于会话过期而尝试将 AJAX 请求重定向到登录页面时,DWR会感到困惑。您想添加一些过滤器,以便

  1. HTTP 状态码等于3xx的请求会执行客户端重定向,例如window.location = ...login.html
  2. 状态码等于2xx的请求将被转发 - 不变 - 到任何已注册的处理程序,如 DWR。
  3. 其他代码,如4xx可能会触发警报,而不是消失在深渊中。

我可能不必解释为什么这种功能会有用。大多数服务器端 Web 框架都支持拦截器模式,原因与您可能希望在客户端上使用它的原因相似。

一种(可能是坏的)实现可能涉及将原始 XMLHttpRequest 对象包装在接受某些过滤器功能的代理中。由于 jQuery、Prototype、ExtJS 等都已经包装了本机浏览器 AJAX 对象,这可能是一个额外的步骤。

这可以本地实现吗?有哪些技术挑战?以前有过这样的事情吗?

4

1 回答 1

0

我已经实现了一些在 jQuery 环境中部分实现的东西。一个 jQuery AJAX 函数除了errorsuccess函数之外,还有一个complete函数。因此,您可以根据返回的状态代码执行以下操作来拦截和重定向:

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

...ETC。不是很“原生”,但在 jQuery 中相对干净。

于 2011-01-24T17:04:53.620 回答