Home / PostsPost

jQuery Ajax 拦截

嘟噜聪2015/02/11 23:46:17 3392人已阅

简介 需注意,此类解决办法有一定的局限,最好要求,页面是一个整体,页面可以共享,那么只需要一个全局的定义就可以了。同时可以在response的里面写入状态如403,ajax的error回调能识别到.

首先建了个拦截器,来判断session超时。用户登录后会保存用户信息在一个session里,在session的监听里,session超时会销毁保存在session里的用户信息,而拦截器就通过session里是否有用户信息来判断session超时。

ps: 这是以前写的东西,不是Symfony2框架里的,Symfony2框架我还没整明白呢。


protected function is_login()
    {
        if (!$this->session->userdata(SESSION_NAME))
        {
            if( $this->is_ajax() )
            {
                echo json_encode(array('isSessionOut' => true));die;
            }else
            {
                echo redirect(base_url('login'));
            }
        }
    }
/**
     * 判断是否是AJAX提交
     * @return bool
     */
    protected function is_ajax()
    {
        if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
            return true;
        else
            return false;
    }
判断如果是Ajax过来的话按照json的格式输出

接下来是jQuery代码,需要注意的是 这块代码需要写在你引入jQuery库之后调用ajax方法之前位置。

(function($) {
            var ajax = $.ajax;
            $.ajax = function(s) {
                var old = s.success;
                s.success = function(resultData, textStatus, jqXHR)
                {
                    if(resultData.isException){
                        alert('程序异常,请重新登录!');
                        window.location = base_url + '/login';
                    }
                    if(resultData.isSessionOut){
                        alert('登录超时,请重新登录!');
                        window.location = base_url + '/login';
                        return false;
                    }else if( resultData.accessModuleNoRight )
                    {
                        alert(resultData.message);
                        return false;
                    }
                    old(resultData, textStatus, jqXHR);
                }
                ajax(s);
            }
        })(jQuery);
以上就是jQuery Ajax拦截的方法

ExtJs 的我以后有时间再写,那块还算是比较大的

很赞哦! (0)

文章评论

点击排行

本栏推荐

标签

站点信息

  • 微信公众号