原生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 相关文章推荐
让getElementsByName适应IE和firefox的方法
Sep 24 Javascript
javascript强大的日期函数代码分享
Sep 04 Javascript
jquery 清空file域示例(兼容个浏览器)
Oct 11 Javascript
JQuery打造省市下拉框联动效果
May 18 Javascript
JavaScript交换两个变量值的七种解决方案
Dec 01 Javascript
Vue指令的钩子函数使用方法
Mar 20 Javascript
BackBone及其实例探究_动力节点Java学院整理
Jul 14 Javascript
JS实现的简单标签点击切换功能示例
Sep 21 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
Mar 21 Javascript
webpack中的热刷新与热加载的区别
Apr 09 Javascript
vue双向绑定数据限制长度的方法
Nov 04 Javascript
node.js如何根据URL返回指定的图片详解
Oct 21 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
人族 TERRAN 概述
2020/03/14 星际争霸
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
php的一个简单加密解密代码
2014/01/14 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
PHP创建XML接口示例
2019/07/04 PHP
JS 表单验证大全
2011/11/23 Javascript
怎么清空javascript数组
2013/05/11 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
即将毕业大学生自荐信
2014/01/24 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
升旗仪式主持词
2014/03/19 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
如何书写授权委托书?
2019/06/25 职场文书
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js