原生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 相关文章推荐
json 定义
Jun 10 Javascript
JavaScript 给汉字排序实例代码
Jun 28 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
Sep 01 Javascript
JQuery中Ajax()的data参数类型实例分析
Dec 15 Javascript
angular2路由切换改变页面title的示例代码
Aug 23 Javascript
vue router demo详解
Oct 13 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
May 17 Javascript
JavaScript读写二进制数据的方法详解
Sep 09 Javascript
JavaScript定时器设置、使用与倒计时案例详解
Jul 08 Javascript
vue 解决数组赋值无法渲染在页面的问题
Oct 28 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 Javascript
JavaScript实现网页跨年倒计时
Dec 02 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/10/09 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
php函数连续调用实例分析
2015/07/30 PHP
thinkphp5框架路由原理与用法详解
2020/02/11 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
详解vue路由
2020/08/05 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
如何用Django处理gzip数据流
2021/01/29 Python
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
C#面试常见问题
2013/02/25 面试题
函授本科自我鉴定
2014/02/04 职场文书
优秀广告词大全
2014/03/19 职场文书
经济管理专业求职信
2014/06/09 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
大学生第一学年自我鉴定2015
2014/09/28 职场文书
初二物理教学反思
2016/02/19 职场文书
小学运动会开幕词
2016/03/04 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python
Python中的程序流程控制语句
2022/02/24 Python