原生js仿jquery实现对Ajax的封装


Posted in Javascript onOctober 04, 2016

前言

与js相比,jquery为我们省去了冗长的获取元素的代码,不用考虑一些麻烦的兼容问题,更加方便的动画实现,以及更加方便的方法调用让我们觉得jquery真是越用越舒服。但是jquery说到底还是对js的封装,我们不光要用的舒服还要深入理解其中的原理,这样才能更好的使用它。

首先我们封装的函数为了能实现可传入无限多个参数,在使用我们即将封装的函数时,需要使用对象进行传参,形式如下:

//data作为参数传入我们下面封装的函数
var data = {
       //数据
       user:"yonghu1",
       pass:'12345',
       age:18,
       //回调函数
       success:function (data){
        alert(data);
       }
      }

函数封装:

1、封装一个辅助函数,把传进来的对象拼接成url的字符串

function toData(obj){
  if (obj == null){
    return obj;
  }
  var arr = [];
  for (var i in obj){
    var str = i+"="+obj[i];
    arr.push(str);
  }
  return arr.join("&");
}

2、封装Ajax

function ajax(obj){
  //指定提交方式的默认值
  obj.type = obj.type || "get";
  //设置是否异步,默认为true(异步)
  obj.async = obj.async || true;
  //设置数据的默认值
  obj.data = obj.data || null;
  if (window.XMLHttpRequest){
    //非ie
    var ajax = new XMLHttpRequest();
  }else{
    //ie
    var ajax = new ActiveXObject("Microsoft.XMLHTTP");
  }
  //区分get和post
  if (obj.type == "post"){
    ajax.open(obj.type,obj.url,obj.async);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    var data = toData(obj.data);
    ajax.send(data);
  }else{
    //get test.php?xx=xx&aa=xx
    var url = obj.url+"?"+toData(obj.data);
    ajax.open(obj.type,url,obj.async);
    ajax.send();
  }

  ajax.onreadystatechange = function (){
    if (ajax.readyState == 4){
        if (ajax.status>=200&&ajax.status<300 || ajax.status==304){
          if (obj.success){
            obj.success(ajax.responseText);
          }
        }else{
          if (obj.error){
            obj.error(ajax.status);
          }
        }
      }
   }  
}

总结

以上就是原生js仿jquery实现对Ajax封装的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
利用Ext Js生成动态树实例代码
Sep 08 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
Mar 14 Javascript
javascript实现自动输出文本(打字特效)
Aug 27 Javascript
推荐10 个很棒的 jQuery 特效代码
Oct 04 Javascript
JS switch判断 三目运算 while 及 属性操作代码
Sep 03 Javascript
基于JavaScript表单脚本(详解)
Oct 18 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
Dec 12 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
Jan 25 Javascript
vue 中动态绑定class 和 style的方法代码详解
Jun 01 Javascript
脚手架vue-cli工程webpack的作用和特点
Sep 29 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
Apr 17 Javascript
vue实现搜索过滤效果
May 28 Javascript
json定义及jquery操作json的方法
Oct 03 #Javascript
javascript中异常处理案例(推荐)
Oct 03 #Javascript
switch语句的妙用(必看篇)
Oct 03 #Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 #Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 #Javascript
JavaScript对象创建模式实例汇总
Oct 03 #Javascript
js实现的光标位置工具函数示例
Oct 03 #Javascript
You might like
PHP SPL标准库中的常用函数介绍
2015/05/11 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
在js代码拼接dom对象到页面上去的模板总结(必看)
2017/02/14 Javascript
JSONP跨域请求
2017/03/02 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
基于javascript canvas实现五子棋游戏
2020/07/08 Javascript
js里面的变量范围分享
2020/07/18 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
python3 与python2 异常处理的区别与联系
2016/06/19 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Burberry英国官网:英国标志性奢侈品牌
2017/03/29 全球购物
Java语言的优势
2015/01/10 面试题
医药工作岗位求职信分享
2013/12/31 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
档案管理员岗位职责
2015/02/12 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
汉语拼音教学反思
2016/02/22 职场文书
Mysql中mvcc各场景理解应用
2022/08/05 MySQL