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

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

前言

通过 jQuery 提供的 ajaxSetup 方法,我们可以拦截页面上所有的 Ajax 请求响应(包括 . a j a x 、 .ajax、 .ajax.post、$.get)。这样我们可以对这些 Ajax 请求响应做统一的处理。比如判断 sesion 是否失效,失效的话就跳转到登录页。下面通过几个样例进行演示。
原文出自:www.hangge.com
转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1412.html

一、统一处理返回结果

  1. 后台返回数据样例

    比如后台返回如下格式的 JSON 数据,包括正常情况和异常情况。

    //正常数据返回
    {"state":1, "msg":"", "data":"欢迎访问hangge.com"}
     
    //session超时数据返回
    {"state":-1, "msg":"session超时,请重新登录!"}
     
    //异常情况数据返回
    {"state":0, "msg":"服务器繁忙,请稍后再试。"}
  1. 前台处理样例
    //全局的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');
     }
   }
});
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值