原生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 相关文章推荐
用js遍历 table的脚本
Jul 23 Javascript
可以将word转成html的js代码
Apr 11 Javascript
Jquery数独游戏解析(一)-页面布局
Nov 05 Javascript
Jquery性能优化详解
May 15 Javascript
jquery结婚电子请柬特效源码分享
Aug 21 Javascript
AngularJS实现元素显示和隐藏的几个案例
Dec 09 Javascript
javascript正则表达式定义(语法)总结
Jan 08 Javascript
jquery中each循环的简单回滚操作
May 05 jQuery
React-Native之定时器Timer的实现代码
Oct 04 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
Jan 23 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
vue router的基本使用和配置教程
Nov 05 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提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
php实现微信支付之退款功能
2018/05/30 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
Vue2.0 v-for filter列表过滤功能的实现
2018/09/07 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
python框架中flask知识点总结
2018/08/17 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
django框架forms组件用法实例详解
2019/12/10 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
护理学毕业生求职信
2013/11/14 职场文书
高中语文教学反思
2014/01/16 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
医学生自荐信范文
2015/03/05 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
实习报告范文
2019/07/30 职场文书
redis限流的实际应用
2021/04/24 Redis
JavaScript前端面试组合函数
2022/06/21 Javascript