ajaxsetup无效_jQuery - 拦截所有Ajax请求(统一处理超时、返回结果、错误状态码 )...

通过 jQuery提供的 ajaxSetup方法,我们可以拦截页面上所有的 Ajax请求响应(包括 $.ajax、$.post、$.get)。这样我们可以对这些 Ajax请求响应做统一的处理。比如判断 sesion是否失效,失效的话就跳转到登录页。下面通过几个样例进行演示。

一、判断session是否失效,并统一进行处理

Ajax请求数据时,后台代码判断当前 session是否存在,是否已经超时失效了。如果 session存在则返回正常数据。如果不存在则不返回正常数据,并在 header中添加一个 session 超时标记。

页面拦截请求后判断 header中是否有这个超时标记,如果有的话则提示用户,并跳转到登录页面。

1,样例效果图

(1)先点击“登录”按钮创建 session,再点击“获取数据”按钮则可以成功得到数据。

(2)如果未登录,或者登录后又点击了“注销”按钮。获取数据时后台判断没有 session,则会在 header中设置一个超时标记。前台页面弹出提示并跳转到登录页。

efdbfdd7a22a27fecf8ffce16abbcc7d.png

242c83e778b01ca9969dfa891d1dd873.png

2,样例代码

(1)index.html(主页面)

hangge.com

//全局的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);

});

}

获取数据

登录

注销

(2)login.php(登录注销)

//启动session会话

session_start();

//处理登录或登出

if($_GET["login"] == "true"){

$_SESSION['userid'] = 123;

echo "登录成功!";

}else{

unset($_SESSION['userid']);

echo "退出成功!";

}

?>

(3)content.php(获取内容)

//启动session会话

session_start();

//session不存在的话停止返回数据,并在头部标记session失效

if (!isset($_SESSION["userid"])){

echo "session超时,请重新登录!";

header("sessionstatus: timeout");

return;

}

?>

这个是测试数据!这个是测试数据!

二、统一处理返回结果

上面的样例是通过 header中的标记来判断 session是否超时。我们也可以将超时或是其他异常情况放置在返回结果中,前台统一解析结果来进行各种异常处理。

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');

}

}

});

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值