原生js仿jquery实现对Ajax的封装


Posted in Javascript onOctober 04, 2016

前言

与js相比,jquery为我们省去了冗长的获取元素的代码,不用考虑一些麻烦的兼容问题,更加方便的动画实现,以及更加方便的方法调用让我们觉得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);
          }
        }
      }
   }  
}

总结

以上就是原生js仿jquery实现对Ajax封装的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
Extjs列表详细信息窗口新建后自动加载解决方法
Apr 02 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
Apr 11 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
Javascript学习笔记之数组的构造函数
Nov 23 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
Aug 17 Javascript
JavaScript随机生成颜色的方法
Oct 15 Javascript
Javascript中Promise的四种常用方法总结
Jul 14 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
Vue-cli3项目配置Vue.config.js实战记录
Jul 29 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
Feb 12 Javascript
Javascript 模拟mvc实现点餐程序案例详解
Dec 24 Javascript
json定义及jquery操作json的方法
Oct 03 #Javascript
javascript中异常处理案例(推荐)
Oct 03 #Javascript
switch语句的妙用(必看篇)
Oct 03 #Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 #Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
Oct 03 #Javascript
JavaScript对象创建模式实例汇总
Oct 03 #Javascript
js实现的光标位置工具函数示例
Oct 03 #Javascript
You might like
php实现mysql同步的实现方法
2009/10/21 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
PHP中SESSION的注销与清除
2015/04/16 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
PDO::commit讲解
2019/01/27 PHP
php7下的filesize函数
2019/09/30 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
JavaScript跳出循环的三种方法(break, return, continue)
2019/07/30 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
如何使用 JavaScript 操作浏览器历史记录 API
2020/11/24 Javascript
pycharm的console输入实现换行的方法
2019/01/16 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
香港迪士尼乐园酒店预订:Hong Kong Disneyland Hotels
2017/05/02 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
幼儿园六一儿童节活动方案
2014/08/26 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
小学四年级学生评语
2014/12/26 职场文书
2015年教师节慰问信
2015/03/23 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis