樣例代碼:
<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>
一、統一處理返回結果
我們可以將超時或是其他異常情況放置在返回結果中,前台統一解析結果來進行各種異常處理。
1,后台返回數據樣例
比如后台返回如下格式的 JSON 數據,包括正常情況和異常情況。
//正常數據返回
{"state":1, "msg":"", "data":"歡迎訪問hangge.com"}
//session超時數據返回
{"state":-1, "msg":"session超時,請重新登錄!"}
//異常情況數據返回
{"state":0, "msg":"服務器繁忙,請稍后再試。"}
2,前台處理樣例
//全局的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);
}
});
}
三、統一處理異常的HTTP狀態碼
我們還可以通過 Ajax 攔截,根據異常的 HTTP 狀態碼(404、500等)統一處理各種請求錯誤、服務器錯誤等情況。
$.ajaxSetup({
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'
);
}
}
});
