原生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 相关文章推荐
如何实现iframe(嵌入式帧)的自适应高度
Jul 26 Javascript
刷新页面实现方式总结(HTML,ASP,JS)
Nov 13 Javascript
EasyUI实现第二层弹出框的方法
Mar 01 Javascript
js实现div层缓慢收缩与展开的方法
May 11 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
详解JavaScript常量定义
Jan 03 Javascript
深入理解JavaScript继承的多种方式和优缺点
May 12 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
Sep 18 Javascript
React Native实现地址挑选器功能
Oct 24 Javascript
vue中SPA单页面应用程序详解
Nov 07 Javascript
jQuery实现滚动效果
Nov 17 jQuery
微信小程序扫描二维码获取信息实例详解
May 07 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编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
json跟xml的对比分析
2008/06/10 Javascript
让FireFox支持innerText的实现代码
2009/12/01 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
vue实现单一筛选、删除筛选条件
2020/10/26 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
介绍一下linux文件系统分配策略
2013/02/25 面试题
什么是方法的重载
2013/06/24 面试题
新闻系毕业生推荐信
2013/11/16 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
《红领巾真好》教学反思
2016/02/16 职场文书
乡镇团代会开幕词
2016/03/04 职场文书