原生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中eval函数的使用方法与示例
Apr 09 Javascript
点图片上一页下一页翻页效果
Jul 09 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
Aug 14 Javascript
js中string转int把String类型转化成int类型
Aug 13 Javascript
Node.js开源应用框架HapiJS介绍
Jan 14 Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 Javascript
bootstrap confirmation按钮提示组件使用详解
Aug 22 Javascript
在vue中使用Autoprefixed的方法
Jul 27 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 Javascript
JS中数据结构之栈
Jan 01 Javascript
Vue.js中的extend绑定节点并显示的方法
Jun 20 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
Nov 20 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
使用数据库保存session的方法
2006/10/09 PHP
php类中private属性继承问题分析
2012/11/01 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
ThinkPHP整合百度Ueditor图文教程
2014/10/21 PHP
总结对比php中的多种序列化
2016/08/28 PHP
php集成开发环境详解
2019/09/24 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
JavaScript解析URL参数示例代码
2013/08/12 Javascript
Javascript浅谈之this
2013/12/17 Javascript
Jquery解析json数据详解
2013/12/26 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
VSCode Python开发环境配置的详细步骤
2019/02/22 Python
tensor和numpy的互相转换的实现示例
2019/08/02 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
浅谈python 类方法/静态方法
2020/09/18 Python
大学生自我鉴定书
2014/03/24 职场文书
学生自我评语大全
2014/04/18 职场文书
大学生党员批评与自我批评
2014/09/28 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
Nginx配置之禁止指定IP访问
2022/05/02 Servers