原生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 相关文章推荐
utf-8编码引起js输出中文乱码的解决办法
Jun 23 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
Feb 27 Javascript
Javascript字符串对象的常用方法简明版
Jun 26 Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 Javascript
jQuery实现图片预加载效果
Nov 27 Javascript
js删除数组元素、清空数组的简单方法(必看)
Jul 27 Javascript
JavaScript canvas实现围绕旋转动画
Nov 18 Javascript
利用Dectorator分模块存储Vuex状态的实现
Feb 05 Javascript
详解Vue.js中引入图片路径的几种方式
Jun 17 Javascript
记录一次websocket封装的过程
Nov 23 Javascript
什么是SOLID
Mar 24 Javascript
三种方式清除vue路由跳转router-link的历史记录
Apr 10 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
图书管理程序(一)
2006/10/09 PHP
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
PHP实现随机数字、字母的验证码功能
2018/08/01 PHP
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
AngularJS自定义指令之复制指令实现方法
2017/05/18 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
Python和Sublime整合过程图示
2019/12/25 Python
Python如何读取文件中图片格式
2020/01/13 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
香港时尚女装购物网站:ZAFUL
2017/07/19 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
会计专业大学生求职信范文
2014/01/28 职场文书
人事专员职责
2014/02/22 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript