原生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客户端快捷键管理类的较完整实现和应用
Jun 08 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
JavaScript数组常用方法
Mar 02 Javascript
vue货币过滤器的实现方法
Apr 01 Javascript
详解vue-cli中配置sass
Jun 21 Javascript
seajs中最常用的7个功能、配置示例
Oct 10 Javascript
vue2 全局变量的设置方法
Mar 09 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
Apr 26 Javascript
每个 JavaScript 工程师都应懂的33个概念
Oct 22 Javascript
Webstorm2016使用技巧(SVN插件使用)
Oct 29 Javascript
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
使用这 6个Vue加载动画库来减少我们网站的跳出率
May 18 Vue.js
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 反向排序和随机排序代码
2010/06/30 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP三元运算的2种写法代码实例
2014/05/12 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
比较搞笑的js陷阱题
2010/02/07 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
React Native模块之Permissions权限申请的实例相机
2017/09/28 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
最新奶茶店创业计划书范文
2014/02/08 职场文书
征婚广告词
2014/03/17 职场文书
药剂专业求职信
2014/06/20 职场文书
销售人才自我评价范文
2014/09/27 职场文书
2014年大学生村官工作总结
2014/11/19 职场文书
初级职称评定工作总结
2015/08/13 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
Golang ort 中的sortInts 方法
2022/04/24 Golang