zoukankan      html  css  js  c++  java
  • jQuery-实现简单的Ajax请求封装

    封装的意义在于复用,在于减少重复的代码。

    我在项目中做了简单的Ajax请求封装,实现方式如下:

     1 //封装Ajax请求
     2 $.extend({
     3     ajaxDirect:function(url,type,data,success,error){
     4         if(type.toLowerCase()=='post'){
     5             data = pack(data)
     6         }
     7         $.ajax({
     8             type: type,
     9             url: base + url,
    10             contentType:'application/json',
    11             data:data,
    12             beforeSend: function (XMLHttpRequest) {
    13                 XMLHttpRequest.setRequestHeader("X-Token", sessionStorage.token)
    14             },
    15             success: function(data){
    16                 success(data)
    17             },
    18             error: function(data){
    19                 error(data)
    20             },
    21             dataType: "json"
    22         })
    23     }
    24 })

    其中的要点为:

    1.使用jQ的$.extend函数,则调用时只需用$.ajaxDirect(url,type,data,function(){},function(){})即可,若data无值,则传空对象过来。

    2.pack为JSON.stringify的封装,即

    1 //对象序列化
    2 function pack(data) {
    3     return JSON.stringify(data)
    4 }
    5 
    6 function unpack(data) {
    7     return JSON.parse(data)
    8 }

    3.该项目在请求时需要传token,则我在请求时在请求头部统一加上了token,即

    1 beforeSend: function (XMLHttpRequest) {
    2       XMLHttpRequest.setRequestHeader("X-Token", sessionStorage.token)
    3 }

    4.base为请求的统一前缀,为公共变量,可自定义值。

    调用示例:

    GET请求

    1 $.ajaxDirect("/user/info",'GET',{},
    2     function (data) {
    3         //发送成功
    4     },
    5     function (data) {
    6         //发送失败
    7     }
    8 )

    POST请求

     1 var data = {
     2     password:$('.newPwd').val()
     3 }
     4 
     5 $.ajaxDirect("/farmer/farmeruser/changePassword",'POST',data,
     6     function(data){
     7         //发送成功
     8     },
     9     function(data){
    10         //发送失败
    11     }
    12 )

    在这个基础上,我们可以进一步完善封装的Ajax。

    //封装Ajax请求
    $.extend({
        ajaxDirect:function(url,type,data,success,error,requestType){
            if(requestType!=='pic'&&type.toLowerCase()=='post'){
                data = pack(data)
            }
            var request = {
                type: type,
                url: base + url,
                contentType:'application/json',
                data:data,
                beforeSend: function (XMLHttpRequest) {
                    XMLHttpRequest.setRequestHeader("X-Token", sessionStorage.token)
                },
                success: function(data){
                    //token过期
                    if(data.message==="token过期"){
                        $.ajax(
                            {
                                type: 'POST',
                                url: base+'/refleshToken',
                                contentType:'application/json',
                                data:pack({
                                    token:sessionStorage.token
                                }),
                                success: function(data){
                                    console.log(data)
                                    sessionStorage.token = data.data.token
                                    location.reload()
                                },
                                error: function(){
                                    $.toast("发送失败", "text")
                                },
                                dataType: "json"
                            })
                    }else{
                        success(data)
                    }
                },
                error: function(data){
                    error(data)
                },
                dataType: "json"
            }
            if(requestType==='pic'){
                request.cache = false
                request.processData = false
                request.contentType = false
            }
    
            if(requestType==='login'){
                request.beforeSend = false
            }
            $.ajax(request)
        }
    })

    上面的代码相比第一段代码增加的功能有:

    1.增加了POST的大小写适配

    2.增加了token过期后统一请求新的token的接口

    3.增加了参数requestType,可传可不传,用于区分请求的类型,从而设置请求头的参数。

  • 相关阅读:
    数据结构之堆排序
    数学之向量的点积(点乘、数量积)
    解决oracle11g数据库监听连接不上问题
    纯净版SSM
    maven打包mapper.xml打不进去问题
    servlet读取请求参数后流失效的问题
    Linux---centos7.0安装、配置
    5-- String 、StringBulid 、StringBuffer的区别
    02 | Java内存模型:看Java如何解决可见性和有序性问题
    01 | 可见性、原子性和有序性问题:并发编程Bug的源头
  • 原文地址:https://www.cnblogs.com/luoyihao/p/11954330.html
Copyright © 2011-2022 走看看