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和 ...
随机推荐
- Java学习笔记(面向对象下)
面向对象(下) 类的继承 类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称为子类,现有类称为父类,子类会自动拥有父类所有可继承的属性和方法.(用extends关键字) //定义A ...
- [TimLinux] django 下载功能中文文件名问题
from django.utils.encoding import escape_uri_pathfrom django.http import HttpResponse def download(r ...
- HDU3666-THE MATRIX PROBLEM(差分约束-不等式解得存在性判断 对数转化)
You have been given a matrix C N*M, each element E of C N*M is positive and no more than 1000, The p ...
- Ceph 块存储
任何普通的linux主机都可以充当ceph客户机,客户机通过网络与ceph存储集群交互以存储或检索用户数据.Ceph RBD支持已经添加到linux主线内核中,从2.6.34以及以后版本开始. === ...
- java概述和java环境按照,java开发体验
java概述: Java的发展可以归纳如下的几个阶段. (1)第一阶段(完善期):JDK 1.0 ( 1995年推出)一JDK 1.2 (1998年推出,Java更名为Java 2): (2)第二阶段 ...
- CCF-CSP题解 201512-4 送货
求字典序最小欧拉路. 似乎不能用\(Fluery\)算法(\(O(E^2)\)).\(Fluery\)算法的思路是:延申的边尽可能不是除去已走过边的图的桥(割).每走一步都要判断是否是割,应当会超时. ...
- 记Linux下一次乱码事件
近来需要对着教程敲代码,但是之前在Windows上的压缩包在Linux解压后发生了乱码,主要是文件内乱码,文件名还是正常的.搜索“Linux rar解压乱码“试了一圈也没解决.不过到是发现了winra ...
- Winform 中DataGridView、dev Gridview控件添加行标题
有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) /// <summary> / ...
- AQS系列(四)- ReentrantReadWriteLock读写锁的释放锁
前言 继续JUC包中ReentrantReadWriteLock的学习,今天学习释放锁. 一.写锁释放锁 入口方法 public void unlock() { sync.release(1); } ...
- 由malloc和new引发的段错误
class Queue{ private: struct node{ string data; struct node * next,*priv; } private: struct node * p ...