傳送AJAX請求前先校驗伺服器是否重啟過
調整起因:當用戶處於應用登入後的介面內時,專案重啟後未重新登入而直接發起ajax請求不能轉至登入 頁面,介面不友好使用者未看到系統響應
解決方案: a.後端:在攔截器處進行AJAX請求過濾完成處理。發現Session不存在後,返回對$.ajaxSetup({})請求的響應。部分程式碼如下:
LsUser user = (LsUser) session.getAttribute("user"); if(ValidateUtil.isEmpty(user)){//session過期
String ajaxSubmit = request.getHeader("X-Requested-With");
if(ajaxSubmit != null && ajaxSubmit.equals("XMLHttpRequest")){
//AJAX_TIMEOUT
PrintWriter printWriter = response.getWriter();
printWriter.print("AJAX_TIMEOUT");
printWriter.flush();
printWriter.close();
}else{
//UN_AJAX_TIMEOUT
response.sendRedirect("/project/views/return");
}
} b.前端:發起AJAX請求前先發送$.ajaxSetup({})請求。當發現Session過期後,跳轉到指定頁面。部分程式碼如下:
$.ajaxSetup({
type : 'POST',
dataFilter : function(data, type) {
if (data == "AJAX_TIMEOUT" || data == "[object XMLDocument]") {
var top = window;
while (top != top.parent) {
top = top.parent;
}
$.toast("登入已超時,請重新登入","forbidden");
top.location.href="${path}/views/return";
}else{
return data;
}
}
})
狀態:已實現。