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

作者: 张培跃 | 来源:发表于2018-06-24 17:49 被阅读53次

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

封装如下:
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("&");
    }
}

调用如下:
ajax({
    type:"get",
    data:{
        name:"laoliu"
    },
    url:"getUserByName.php",
    async:false,
    success:function(res){
          //成功
    },
    error:function(error){
        //失败
    }
})

相关文章

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

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

  • 原生js实现对Ajax的封装(模仿jquery)

    前言 众所周知,jquery在我们日常开发中的使用频率非常高,与js相比,我们省去了冗长的获取元素的代码,不用考虑...

  • html5的ajax学习(三)

    一.原生的ajax封装 原生的ajax的调用 二.jquery的ajax 2.1 jquery的语法 三. fun...

  • js 原生ajax的封装

    概念 ajax是前端常用技术,今天用原生js封装了一个ajax函数,类似于jquery库的$.ajax()函数,大...

  • Ajax的使用以及跨域(中)

    好,我们接着上篇的内容接续来讲解Ajax相关的内容。今天要将的是我们自己模仿着jQuery封装Ajax请求。 原生...

  • 前端基础知识-示例代码

    1、ajax 2、jsonp a、原生实现方式 b、jquery ajax: c、vue.js d、npm包jso...

  • ajax总结

    1. Ajax 1.1 原生JavaScript封装Ajax 1.2 jquery ajax 及其 快捷方法 $....

  • Ajax的使用以及跨域

    我们自己模仿着jQuery封装Ajax请求。 原生的Ajax请求上篇文章已经都说清楚了,大家应该会感觉调用起来代码...

  • [转]JS原生Ajax代码示例

    文章来源: JS原生Ajax和jQuery的Ajax与代码示例 -- 苏凯勇往直前 JS原生的Ajax其实就是围绕...

  • 实现一个AJAX

    AJAX是什么鬼 续篇 今天我们给AJAX封装一下 之前写了篇有关用原生JS写jQuery的博客下面是相关主要代码...

网友评论

    本文标题:原生js模仿jQuery实现对Ajax的封装

    本文链接:https://www.haomeiwen.com/subject/wqrsyftx.html