首頁 >web前端 >js教程 >jQuery ajax全域函數處理session過期後的ajax跳轉問題

jQuery ajax全域函數處理session過期後的ajax跳轉問題

高洛峰
高洛峰原創
2017-01-07 09:39:401317瀏覽

做web常常需要考慮session過期的問題,session過期就讓頁面跳到登入介面去,但是存在這樣一個問題,當頁面過期後,用戶請求後台的方式有兩種:傳統方式和非同步請求方式,傳統方式倒好解決,請求到後台,攔截到過期的操作,直接跳轉,但是異步請求不會刷新整個頁面,因此對session過期的處理也不能按往常的方式,需要另外的操作。

具體思路:攔截器中判斷是否為ajax請求- 是ajax請求則回傳一個訊息-頁面新增一個全域的ajax處理事件,對訊息進行判斷,如果是報告session過期,location到登入頁面

第一步,攔截器判斷是否為ajax請求:

if(request.getHeader("x-requested-with")!=null
&& request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
//是ajax请求,则返回个消息给前台
PrintWriter printWriter = response.getWriter();
printWriter.print("{sessionState:timeout}");
printWriter.flush();
printWriter.close();
}else{
//不是ajax请求,则直接跳转页面
}

   

第二步,設定全域ajax處理事件,處理session過期的問題,類似一個攔截器或過濾器:

$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
cache:false ,
complete:function(data,TS){
//对返回的数据data做判断,
//session过期的话,就location到一个页面
}
}
});

這是一個基於jQuery的非同步處理機制,完整程式碼我沒寫,上次在公司寫的程式碼,帶不出來,文章裡的程式碼有些還是在網路上找來黏進去的,凌晨都過了半小時了,太睏了,記錄下思路而已。

PS:ajax 操作全局監測,用戶session失效

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) {
try {
if (data.sessionstatus == false) {
//用户失效进行操作
//return;
}
} catch (e) {
}
_success(data, textStatus);
}
});
_ajax(_opt);
};
});

    

更多jQuery ajax全局函數處理session過期後的ajax跳轉問題相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn