原生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 remove 自定义数组删除方法
Oct 20 Javascript
JavaScript OOP类与继承
Nov 15 Javascript
javascript中的遍历for in 以及with的用法
Dec 22 Javascript
使用JQuery FancyBox插件实现图片展示特效
Nov 16 Javascript
老司机带你解读jQuery插件开发流程
May 16 Javascript
jQuery中ajax错误调试分析
Dec 01 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
Dec 14 Javascript
JavaScript如何一次性展示几万条数据
Mar 30 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
Sep 07 Javascript
微信小程序支付及退款流程详解
Nov 30 Javascript
Vue.js实现数据响应的方法
Aug 13 Javascript
微信小程序实现消息框弹出动画
Apr 18 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+MYSQL的文章管理系统(二)
2006/10/09 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
destoon常用的安全设置概述
2014/06/21 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
jqGrid读取选择的多行的某个属性代码
2014/05/18 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
NodeJS整合银联网关支付(DEMO)
2016/11/09 NodeJs
JS简单获取日期相差天数的方法
2017/04/24 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
Python ljust rjust center输出
2008/09/06 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
人事部经理岗位职责
2014/03/07 职场文书
护士求职信
2014/07/05 职场文书
大学生实习证明范本
2014/09/19 职场文书
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
使用python绘制分组对比柱状图
2022/04/21 Python
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android