<html> <head> <title>hangge.com</title> <meta charset="utf-8"/> <script type="text/javascript" src="./jquery-1.11.1.min.js"></script> <script> //全局的ajax訪問,處理ajax清求時session超時 $.ajaxSetup({ contentType:"application/x-www-form-urlencoded;charset=utf-8", complete:function(XMLHttpRequest,textStatus){ //經過XMLHttpRequest取得響應頭,sessionstatus, var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); if(sessionstatus=="timeout"){ //若是超時就處理 ,指定要跳轉的頁面(好比登錄頁) window.location.replace("/login/index.php"); } } }); //獲取數據 function getContent() { $.get("content.php", function (data){ alert(data); }); } //登陸或註銷 function login(value) { $.get("login.php",{"login":value} , function (data){ alert(data); }); } </script> </head> <body> <button onclick="getContent()">獲取數據</button> <button onclick="login(true)">登陸</button> <button onclick="login(false)">註銷</button> </body> </html>
咱們能夠將超時或是其餘異常狀況放置在返回結果中,前臺統一解析結果來進行各類異常處理。javascript
好比後臺返回以下格式的 JSON 數據,包括正常狀況和異常狀況。php
//正常數據返回 {"state":1, "msg":"", "data":"歡迎訪問hangge.com"} //session超時數據返回 {"state":-1, "msg":"session超時,請從新登陸!"} //異常狀況數據返回 {"state":0, "msg":"服務器繁忙,請稍後再試。"}
//全局的ajax訪問,處理ajax清求時異常 $.ajaxSetup({ contentType:"application/x-www-form-urlencoded;charset=utf-8", complete:function(XMLHttpRequest,textStatus){ //經過XMLHttpRequest取得響應結果 var res = XMLHttpRequest.responseText; try{ var jsonData = JSON.parse(res); if(jsonData.state == -1){ //若是超時就處理 ,指定要跳轉的頁面(好比登錄頁) alert(jsonData.msg); window.location.replace("/login/index.php"); }else if(jsonData.state == 0){ //其餘的異常狀況,給個提示。 alert(jsonData.msg); }else{ //正常狀況就不統一處理了 } }catch(e){ } } }); //獲取數據 function getContent() { $.get("content.php", function (data){ var jsonData = JSON.parse(data); //只處理正常的狀況 if(jsonData.state == 1){ alert(jsonData.data); } }); }
咱們還能夠經過 Ajax 攔截,根據異常的 HTTP 狀態碼(40四、500等)統一處理各類請求錯誤、服務器錯誤等狀況。html
$.ajaxSetup({
java
contentType:
"application/x-www-form-urlencoded;charset=utf-8"
,
complete:
function
(XMLHttpRequest,textStatus){
},
statusCode: {
404:
function
() {
alert(
'數據獲取/輸入失敗,沒有此服務。404'
);
},
504:
function
() {
alert(
'數據獲取/輸入失敗,服務器沒有響應。504'
);
},
500:
function
() {
alert(
'服務器有誤。500'
);
}
}
});