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'); } }});jQuery - 拦截所有Ajax请求(统一处理超时、返回结果、错误状态码 )的更多相关文章
- js拦截全局ajax请求
你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...
- js 拦截全局 ajax 请求
你是否有过下面的需求:需要给所有ajax请求添加统一签名.需要统计某个接口被请求的次数.需要限制http请求的方法必须为get或post.需要分析别人网络协议等等,那么如何做?想想,如果能够拦截所有a ...
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...
- 关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题
前段时间做一个项目,而项目中所有的请求都要用jquery 中的ajax请求或者post请求,但是开始处理一些简单操作还好,但是自己写了一些验证就出现问题了,比如表单提交的时候,要验证帐号的唯一性,所以 ...
- phpStudy4——前端页面使用Ajax请求并解析php返回的json数据
项目需求: 在html页面显示所有用户列表信息. 需求分析: 1. html页面使用ajax向后端php请求用户数据 2. php脚本查询数据库,并将查询后的结果以json格式返回前端html页面 3 ...
- Jquery progressbar通过Ajax请求获取后台进度演示
项目源代码下载:http://download.csdn.net/detail/nuptboyzhb/6262253 1.简介 本文主要演示Jquery progressbar的进度条功能.js通过a ...
- spring security:ajax请求的session超时处理
当前端在用ajax请求时,如果没有设置session超时时间并且做跳转到登录界面的处理,那么只是靠后台是很难完成超时的一系列动作的:但是如果后台 没有封装一个ajax请求公共类,那么在ajax请求上下 ...
- jQuery选择器,Ajax请求
jQuery选择器: $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $( ...
- jquery中的ajax请求用法以及参数详情
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
随机推荐
- 压缩感知重构算法之OLS算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- (全国多校重现赛一)B-Ch's gifts
Mr. Cui is working off-campus and he misses his girl friend very much. After a whole night tossing a ...
- 【Seleniuem】selenium.common.exceptions.InvalidSelectorException
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: An invalid or illega ...
- IDEA2019.3安装和激活
1.JetBrain网站下载它旗舰版,有zip也有exe, 我下载的zip包,752M 2.解压到自己系统目录下,比如: D:\ideaIU-2019.3.win 3.去导bin目录下,将idea6 ...
- JDBC导致的反序列化攻击
背景 上周BlackHat Europe 2019的议题<New Exploit Technique In Java Deserialization Attack>中提到了一个通过注入JD ...
- WinForm GroupBox控件重绘外观
private void groupBoxFun_Paint(PaintEventArgs e, GroupBox groupBox){ e.Graphics.Clear(groupBox.BackC ...
- Spring Cloud Config入门(本地配置)
spring cloud config 简介 Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持.使用Config Server,您可以在所有环境中管理应用程序的外 ...
- flink time and watermark
流处理中时间本质上就是一个普通的递增字段(long型,自1970年算起的微秒数),不一定真的表示时间. watermark只是应对乱序的办法之一,大多是启发式的,在延迟和完整性之间抉择.(如果没有延迟 ...
- html5+css3的神奇搭配
1.关于浮动 浮动的元素会脱离标准文档流(float),从而不占据空间,实现了一行排列多个元素的效果 ,但是又导致上级元素height消失,处理这种情况的方法就是有两种: 1.第一种在css里写个伪类 ...
- 从KafkaConsumer看看Kafka(一)
Kafka的消息模型为发布订阅模型,消息生产者将消息发布到主题(topic)中,一个或多个消费者订阅(消费)该主题消息并消费,此模型中发布到topic中的消息会被所有消费者所订阅到,先介绍Kafk ...