原生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 29 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
Sep 06 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
Dec 08 Javascript
jQuery日历插件datepicker用法详解
Mar 03 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
Angular2关于@angular/cli默认端口号配置的问题
Jul 15 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 Javascript
微信小程序实现城市列表选择
Jun 05 Javascript
vue项目中添加单元测试的方法
Jul 21 Javascript
为什么推荐使用JSX开发Vue3
Dec 28 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 set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php中explode函数用法分析
2014/11/15 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
JavaScript 字符串连接性能优化
2008/12/20 Javascript
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
JavaScript中的setUTCDate()方法使用详解
2015/06/11 Javascript
基于jQuery实现仿51job城市选择功能实例代码
2016/03/02 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
nodejs基础知识
2017/02/03 NodeJs
JS实现的简单拖拽功能示例
2017/03/13 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
利用JS制作万年历的方法
2017/08/16 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
node koa2 ssr项目搭建的方法步骤
2020/12/11 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
[50:24]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python正则分组的应用
2013/11/10 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
幼师专业求职推荐信
2013/11/08 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
职工食堂管理制度
2015/08/06 职场文书
应收账款管理制度
2015/08/06 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python
Java 使用类型为Object的变量指向任意类型的对象
2022/04/13 Java/Android