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

时间:2010-03-04 10:56:51

标签: javascript ajax interceptor

让我从现实生活中的用例开始:

当服务器端身份验证筛选器由于会话过期而尝试将AJAX请求重定向到登录页面时,

DWR变得混乱。你想添加一些过滤器

  1. HTTP状态代码等于 3xx 的请求执行客户端重定向,例如 window.location = ... login.html
  2. 状态代码等于 2xx 的请求会被转发 - 未更改 - 发送给任何已注册的处理程序,例如DWR。
  3. 其他代码,例如 4xx 可能会触发警报,而不是消失在深渊中。
  4. 我可能不必解释为什么这种功能会有用;大多数服务器端Web框架都支持拦截器模式,原因与您在客户端上可能需要的类似。

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

    这可以原生实现吗?有哪些技术挑战?之前有没有这样的事情?

1 个答案:

答案 0 :(得分:0)

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

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

...等。不完全'本地',但在jQuery中相对干净。