代码之家  ›  专栏  ›  技术社区  ›  Robert Campbell

如何在客户端(浏览器)AJAX请求/响应对上实现拦截器模式?

  •  4
  • Robert Campbell  · 技术社区  · 15 年前

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

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

    1. HTTP状态代码等于的请求 3倍 执行客户端重定向,如 window.location=…登录.html
    2. 状态码相等的请求 2倍 在未更改的情况下转发给任何注册的处理程序,如DWR。
    3. 其他代码,如 四倍 可能会触发警报而不是消失在深渊中。

    我可能不需要解释为什么这类功能会有用;大多数服务器端web框架支持拦截器模式的原因与您希望在客户端使用拦截器模式的原因类似。

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

    这有可能在本地实现吗?技术挑战是什么?以前做过这样的事情吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   Hogsmill    14 年前

    我在jQuery环境中实现了部分实现。jQuery AJAX函数具有 error success 函数,a complete 功能也一样。因此,您可以执行以下操作,根据返回的状态代码进行拦截和重新定向:

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

    ……等等,不完全是“本机的”,但从jQuery内部来看相对干净。