一個很常見的問題,如果用戶登錄網站session過期,需要用戶返回登錄頁面重新登錄。
如果是http請求可以在后台設置攔截器,統一攔截並跳轉。但是ajax方法並不能通過后台直接跳轉。
所以我們可以寫一個ajax全局方法,讓每一個ajax請求都訪問這個方法,如果經過判斷session過期,可以跳轉到登錄頁面。
以下是引用jQuery的ajax全局方法:
$.ajaxSetup({ error : function(x, status, e) { if (x.status == '403') { alert('您沒有權限執行當前操作!'); } else { console.log('系統錯誤,請聯系管理員!'); } return false; }, complete : function(r, s) { var istimeout = r.getResponseHeader('sessionstatus')=='timeout'; if (istimeout) { //alert(r.responseText); var loginurl = r.getResponseHeader("loginurl"); parent.window.location = loginurl; } } });
我當時做這個項目的時候還用到了vue,所以把vue的ajax全局方法也寫一下
Vue.http.interceptors.push(function(request) { // modify request request.method = 'POST'; // return response callback return function(response) { var sessionAjax = response.headers.map.sessionstatus; if (sessionAjax != undefined) { var loginurl = response.headers.map.loginurl[0]; parent.window.location = loginurl; } }; });