jQuery - 拦截所有Ajax请求(统一处理超时、返回…
2019-11-29 08:40:48来源:博客园 阅读 ()
jQuery - 拦截所有Ajax请求(统一处理超时、返回结果、错误状态码 )
样例代码:
<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'
);
}
}
});
原文链接:https://www.cnblogs.com/flyingDragon/p/11956096.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 当IntelliJ IDEA2020.1遇上JDK14:所有美好环环相扣 2020-06-01
- springboot~拦截器的使用场景 2020-05-28
- SpringMVC高级-拦截器如何正确运用?案例详解 2020-05-21
- Spring拦截器WebMvcConfigurer针对Swagger的拦截问题 2020-05-21
- 真香警告!扩展 swagger支持文档自动列举所有枚举值 2020-05-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash