原生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 相关文章推荐
use jscript List Installed Software
Jun 11 Javascript
基于jQuery的获取标签名的代码
Jul 16 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
JS 获取滚动条高度示例代码
Oct 24 Javascript
jquery实现手风琴效果
Nov 20 Javascript
微信小程序 详解Page中data数据操作和函数调用
Jan 12 Javascript
angularjs项目的页面跳转如何实现(5种方法)
May 25 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
Mar 11 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
May 01 Javascript
layui实现三级导航菜单
Jul 26 Javascript
jQuery实时统计输入框字数及限制
Jun 24 jQuery
JS新手入门数组处理的实用方法汇总
Apr 07 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 sprintf()函数用例解析
2011/05/18 PHP
PHP中的替代语法介绍
2015/01/09 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
Python 命令行非阻塞输入的小例子
2013/09/27 Python
Python 创建子进程模块subprocess详解
2015/04/08 Python
python 显示数组全部元素的方法
2018/04/19 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
Python实现SMTP邮件发送
2020/06/16 Python
用纯css3实现的图片放大镜特效效果非常不错
2014/09/02 HTML / CSS
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
党员岗位承诺口号大全
2014/03/28 职场文书
小学生综合素质评语
2014/04/23 职场文书
演讲稿的写法
2014/05/19 职场文书
岗位职责说明书模板
2014/07/30 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
世界名著读书笔记
2015/06/25 职场文书
思想工作总结范文
2015/08/12 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
CPU不支持Windows11系统怎么办
2021/11/21 数码科技