zoukankan      html  css  js  c++  java
  • jQuery

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

    前言

    通过 jQuery 提供的 ajaxSetup 方法,我们可以拦截页面上所有的 Ajax 请求响应(包括 .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');
         }
       }
    });
    


    作者:不敲代码的攻城狮
    出处:https://www.cnblogs.com/leigq/
    任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人能读懂的代码。

     
  • 相关阅读:
    [转]sql语句优化原则
    [Effective C++]构造/析构/赋值运算
    [Effective C++]定制new和delete
    [Effective C++]让自己习惯C++
    [C++ primer]联合:节省空间的类
    [C++ primer]类成员指针
    [C++ primer]运行时类型识别(RTTI)
    [APUE]fork后子进程的运行情况
    [C++ primer]优化内存分配
    [C++ primer]虚函数和纯虚函数
  • 原文地址:https://www.cnblogs.com/leigq/p/13406584.html
Copyright © 2011-2022 走看看