原生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 相关文章推荐
Extjs改变树节点的勾选状态点击按钮将复选框去掉
Nov 14 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
javascript实现滑动解锁功能
Dec 31 Javascript
jquery中validate与form插件提交的方式小结
Mar 26 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
Jun 12 Javascript
JS中动态创建元素的三种方法总结(推荐)
Oct 20 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
Dec 08 Javascript
js获取html页面代码中图片地址的实现代码
Mar 05 Javascript
vue实现点击当前标签高亮效果【推荐】
Jun 22 Javascript
webpack4.x开发环境配置详解
Aug 04 Javascript
javascript之分片上传,断点续传的实际项目实现详解
Sep 05 Javascript
VUE.js实现动态设置输入框disabled属性
Oct 28 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下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
2019/10/11 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
JS option location 页面跳转实现代码
2008/12/27 Javascript
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
Bootstrap布局方式详解
2016/05/27 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
使用Python的turtle模块画国旗
2019/09/24 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
网络教育自我鉴定
2013/11/01 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2015最新民情日记范文
2015/06/26 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang