原生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 相关文章推荐
jQuery 图像裁剪插件Jcrop的简单使用
May 22 Javascript
javaScript call 函数的用法说明
Apr 09 Javascript
Javascript读取cookie函数代码
Oct 16 Javascript
Javascript实现简单二级下拉菜单实例
Jun 15 Javascript
基于JQuery的$.ajax方法进行异步请求导致页面闪烁的解决办法
May 10 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
Sep 12 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 Javascript
JS使用正则实现去掉字符串左右空格的方法
Dec 27 Javascript
jQuery中DOM节点的删除方法总结(超全面)
Jan 22 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
Apr 21 Javascript
Vue中使用的EventBus有生命周期
Jul 12 Javascript
BootStrap table实现表格行拖拽效果
Dec 01 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中的登陆login实例代码
2016/06/20 PHP
PHP实现针对日期,月数,天数,周数,小时,分,秒等的加减运算示例【基于strtotime】
2017/04/19 PHP
yii2 在控制器中验证请求参数的使用方法
2019/06/19 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
比较详细的关于javascript 解析json的代码
2009/12/16 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
一样的table?不一样的table(可编辑状态table)
2012/09/19 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
jquery实现倒计时效果
2015/12/14 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
js微信支付实现代码
2016/12/22 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
webpack多页面开发实践
2017/12/18 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
Vue-Cli项目优化操作的实现
2019/10/27 Javascript
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
Python中List.index()方法的使用教程
2015/05/20 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
python学生管理系统
2019/01/30 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
客户代表自我评价范例
2013/09/24 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
党员入党表决心的话
2014/03/11 职场文书
公益广告语集锦
2014/03/13 职场文书
校园文化标语
2014/06/18 职场文书
教师辞职书范文
2015/02/26 职场文书
儿子满月酒致辞
2015/07/29 职场文书