原生js实现对Ajax的封装(仿jquery)


Posted in Javascript onJanuary 22, 2017

前言

众所周知,jquery在我们日常开发中的使用频率非常高,与js相比,我们省去了冗长的获取元素的代码,不用考虑一些麻烦的兼容问题,更加方便的动画实现,以及更加方便的方法调用让我们觉得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);
          }
        }
      }
   }  
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js生产批量批处理执行命令
Jul 28 Javascript
JavaScript继承方式实例
Oct 29 Javascript
js中parseInt函数浅谈
Jul 31 Javascript
利用javascript判断文件是否存在
Dec 31 Javascript
JSON取值前判断
Dec 23 Javascript
JavaScript的Date()方法使用详解
Jun 09 Javascript
bootstrap3 兼容IE8浏览器!
May 02 Javascript
WEB 前端开发中防治重复提交的实现方法
Oct 26 Javascript
js移动焦点到最后位置的简单方法
Nov 25 Javascript
Bootstrap select下拉联动(jQuery cxselect)
Jan 04 Javascript
优化Vue项目编译文件大小的方法步骤
May 27 Javascript
vuex state中的数组变化监听实例
Nov 06 Javascript
js遍历json的key和value的实例
Jan 22 #Javascript
jquery pagination分页插件使用详解(后台struts2)
Jan 22 #Javascript
jQuery中DOM节点的删除方法总结(超全面)
Jan 22 #Javascript
js实现贪吃蛇小游戏(容易理解)
Jan 22 #Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
Jan 22 #Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
Jan 22 #Javascript
js实现图片360度旋转
Jan 22 #Javascript
You might like
PHP常用代码
2006/11/23 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
js 替换
2008/02/19 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
vue.js表格分页示例
2016/10/18 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
跟老齐学Python之编写类之二方法
2014/10/11 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
中专毕业生自我鉴定范文
2013/11/09 职场文书
社区端午节活动方案
2014/01/28 职场文书
《学棋》教后反思
2014/04/14 职场文书
个人安全承诺书
2014/05/22 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
Java中的Kotlin 内部类原理
2022/06/16 Java/Android
windows系统安装配置nginx环境
2022/06/28 Servers