原生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 相关文章推荐
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
Js 正则表达式知识汇总
Dec 02 Javascript
JavaScript实现自动对页面上敏感词进行屏蔽的方法
Jul 27 Javascript
jquery可定制的在线UEditor编辑器
Nov 17 Javascript
JS实现的倒计时效果实例(2则实例)
Dec 23 Javascript
jquery插件EasyUI中form表单提交实例分享
Jan 11 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
Jun 16 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
JavaScript 链式结构序列化详解
Sep 30 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
Mar 28 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
Sep 24 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
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
JavaScript中的ParseInt(&quot;08&quot;)和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
ES6的异步操作之promise用法和async函数的具体使用
2019/12/06 Javascript
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
numpy 计算两个数组重复程度的方法
2018/11/07 Python
PyQt5组件读取参数的实例
2019/06/25 Python
Python实现串口通信(pyserial)过程解析
2019/09/25 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
年终自我鉴定
2013/10/09 职场文书
魅力教师事迹材料
2014/01/10 职场文书
《浅水洼里的小鱼》听课反思
2014/02/28 职场文书
团队激励口号
2014/06/06 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
村官个人总结范文
2015/03/03 职场文书
法制工作总结2015
2015/07/23 职场文书
中学教师教学工作总结
2015/08/13 职场文书
laravel添加角色和模糊搜索功能的实现代码
2021/06/22 PHP
Python标准库pathlib操作目录和文件
2021/11/20 Python