前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原生js模仿jQuery实现对Ajax的封装

原生js模仿jQuery实现对Ajax的封装

作者头像
用户1272076
发布2019-03-26 16:33:59
2.6K0
发布2019-03-26 16:33:59
举报
文章被收录于专栏:张培跃张培跃

老铁们,还记得如何对原生ajax进行封装吗?注释较少,看看是否还能看的明白?

封装如下:
代码语言:javascript
复制
function ajax(obj){
    //指定提交方式的默认值
    obj.type = obj.type || "get";
    //设置是否异步,默认为true(异步)
    obj.async = obj.async || true;
    //设置数据的默认值
    obj.data = obj.data || null;
    var params=_params(obj.data);
    //在路径后面添加时间戳加随机数防止浏览器缓存。
    obj.url+=(obj.url.indexOf("?")>-1?"&":"?")+"t="+((new Date()).getTime()+Math.random());
    if(obj.type.toLowerCase()=="get" && params.length>0){//将转换后的data.与url进行拼接。
        obj.url+="&"+params;
    }
    var xhr=new XMLHttpRequest();
    xhr.open(obj.type,obj.url,obj.async);
    if(obj.type.toLowerCase()=="post"){
        xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xhr.send(params)
    }else
        xhr.send(null);
    if(obj.async){//异步调用
        //监听响应状态。
        xhr.onreadystatechange=function(){
            if(xhr.readyState==4)//响应状态为4,数据加载完毕。
                callback();
        }
    }else//同步
        callback();
    function callback(){
        if(xhr.status==200){
            obj.success(xhr.responseText);
        }else{
            obj.error(xhr.status);
        }
    }
    //将对象序列化,将对象拼接成url字符串
    function _params(data){
        if(obj==null)
            return obj;
        var arr=[];
        for(var i in data){
            arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i]));
        }
        return arr.join("&");
    }
}
调用如下:
代码语言:javascript
复制
ajax({
    type:"get",
    data:{
        name:"laoliu"
    },
    url:"getUserByName.php",
    async:false,
    success:function(res){
          //成功
    },
    error:function(error){
        //失败
    }
})
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 张培跃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 封装如下:
  • 调用如下:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档