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、统一处理返回结果

咱们能够将超时或是其余异常状况放置在返回结果中,前台统一解析结果来进行各类异常处理。javascript

1,后台返回数据样例

好比后台返回以下格式的 JSON 数据,包括正常状况和异常状况。php

//正常数据返回
{"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);
      }
   });
}

  

3、统一处理异常的HTTP状态码

咱们还能够经过 Ajax 拦截,根据异常的 HTTP 状态码(40四、500等)统一处理各类请求错误、服务器错误等状况。html

$.ajaxSetup({java

    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' );
      }
    }
});
相关文章
相关标签/搜索