重寫ajax方法實現非同步請求session到期時跳轉登入頁面

來源:互聯網
上載者:User

標籤:非同步   ajax   session   jquery   

一般我們會在過濾器裡判斷登入狀態,如果沒登入就跳轉登入頁面,過濾器java核心代碼如下:

UserItem loginUser = (UserItem)request.getSession().getAttribute("loginUser");if(loginUser == null) {response.sendRedirect("/login.action");}
這個對於普通頁面來說完全沒問題,但是在使用ajax的時候往往得不到想要的效果。因為頁面根本沒跳轉,只是捕獲到了登入頁面的源碼而已。

網上一堆庸人給出一堆扯蛋的方法,主要有。

1.返回的字串附加登入狀態;(那麼多,你願意改麼,而且前後端都得改,編碼的時候還要總去考慮那個狀態煩不煩)

2.修改http頭資訊;(裝B深沉型)

3.修改jquery源檔案判斷;(勉強算個程式員,但是儘力不去動源,效能問題你還得解壓再壓縮,別人也不一定知道你改過源碼)

我的解決方案跟第三種方法思路接近,重寫ajax方法實現前置處理,代碼如下:

jQuery(function($){    // 備份jquery的ajax方法      var _ajax=$.ajax;    // 重寫ajax方法,先判斷登入在執行success函數     $.ajax=function(opt){    var _success = opt && opt.success || function(a, b){};        var _opt = $.extend(opt, {        success:function(data, textStatus){        // 如果後台將請求重新導向到了登入頁,則data裡面存放的就是登入頁的源碼,這裡需要找到data是登入頁的證據(標記)        if(data.indexOf('weinianjie') != -1) {        window.location.href= Globals.ctx + "/login.action";        return;        }        _success(data, textStatus);              }          });        _ajax(_opt);    };});

在登入頁面的源碼裡面,你隨便找個地方打個標記然後隱藏掉,比如我的標記就是weinianjie。對於$.get和$.post就不用說了吧,這兩個方法都是調用了$.ajax方法的,所以也就自動擷取了前置判斷能力。

大功告成,注意以上擴充需要放在你的所有ajax請求之前執行。



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.