原生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 相关文章推荐
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
JavaScript版DateAdd和DateDiff函数代码
Mar 01 Javascript
解析jquery获取父窗口的元素
Jun 26 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
Sep 29 Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
Feb 10 Javascript
vue iview多张图片大图预览、缩放翻转
Jul 13 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
Apr 21 Javascript
详解React 元素渲染
Jul 07 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 Javascript
vue项目中微信登录的实现操作
Sep 08 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通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
PHP 代码规范小结
2012/03/08 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
JavaScript Undefined,Null类型和NaN值区别
2008/10/22 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
javascript取消文本选定的实现代码
2010/11/14 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
如何利用ES6进行Promise封装总结
2019/02/11 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Python ldap实现登录实例代码
2016/09/30 Python
python实现八大排序算法(2)
2017/09/14 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
python实现简易动态时钟
2018/11/19 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
手术室护士自我鉴定
2013/10/14 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
2015年爱国卫生月活动总结
2015/03/26 职场文书
施工现场安全管理制度
2015/08/05 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript
教你怎么用Python实现多路径迷宫
2021/04/29 Python