原生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 相关文章推荐
dreamweaver 安装Jquery智能提示
Apr 02 Javascript
JavaScript 基础篇之运算符、语句(二)
Apr 07 Javascript
jquery的flexigrid无法显示数据提示获取到数据
Jul 19 Javascript
jQuery遍历Form示例代码
Sep 03 Javascript
win7下安装配置node.js+express开发环境
Dec 06 Javascript
RequireJS多页面应用实例分析
Jun 29 Javascript
AngularJS中的缓存使用
Jan 11 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
Sep 26 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
Mar 03 Javascript
浅谈在node.js进入文件目录的问题
May 13 Javascript
小程序兼容安卓和IOS数据处理问题及坑
Sep 18 Javascript
基于layui的table插件进行复选框联动功能的实现方法
Sep 19 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
层叠菜单的动态生成
2006/10/09 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
2014/06/22 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
web前端开发也需要日志
2010/12/09 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
python实现人人网登录示例分享
2014/01/19 Python
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Python中的集合类型知识讲解
2015/08/19 Python
Python简单实现安全开关文件的两种方式
2016/09/19 Python
python学习教程之使用py2exe打包
2017/09/24 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
Python3 批量扫描端口的例子
2019/07/25 Python
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
机械工程师岗位职责
2014/06/16 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
2022/04/06 Python
Win11开始菜单添加休眠选项
2022/04/19 数码科技