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

发布时间 - 2026-01-10 22:43:21    点击率:

前言

众所周知,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);
          }
        }
      }
   }  
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js  # Ajax  # 封装  # 原生js封装的一些jquery方法(详解)  # 原生js仿jquery实现对Ajax的封装  # 详解JavaScript原生封装ajax请求和Jquery中的ajax请求  # JavaScript使用链式方法封装jQuery中CSS()方法示例  # 基于jquery封装的一个js分页  # JS链式调用的实现方法  # 学习JavaScript设计模式(链式调用)  # 原生js实现简单的链式操作  # javascript中的链式调用  # js实现封装jQuery的简单方法与链式操作详解  # 默认值  # 让我们  # 多个  # 要用  # 说到底  # 众所周知  # 回调  # 大家多多  # 默认为  # 使用频率  # 使用它  # url  # alert  # toData  # arr  # success  # function  # join  # push  # str 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: java中使用zxing批量生成二维码立牌  ,怎么在广州志愿者网站注册?  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Python进程池调度策略_任务分发说明【指导】  装修招标网站设计制作流程,装修招标流程?  如何在万网利用已有域名快速建站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  JavaScript如何实现继承_有哪些常用方法  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Laravel如何创建自定义Facades?(详细步骤)  Laravel如何实现用户密码重置功能?(完整流程代码)  如何在 React 中条件性地遍历数组并渲染元素  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  简单实现Android验证码  如何在云虚拟主机上快速搭建个人网站?  使用C语言编写圣诞表白程序  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  如何基于云服务器快速搭建个人网站?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何用IIS7快速搭建并优化网站站点?  Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  黑客入侵网站服务器的常见手法有哪些?  在Oracle关闭情况下如何修改spfile的参数  php打包exe后无法访问网络共享_共享权限设置方法【教程】  如何在阿里云ECS服务器部署织梦CMS网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  详解vue.js组件化开发实践  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何确认建站备案号应放置的具体位置?  如何自定义建站之星模板颜色并下载新样式?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  如何在香港服务器上快速搭建免备案网站?  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  北京网站制作公司哪家好一点,北京租房网站有哪些?  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何在万网自助建站平台快速创建网站?  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  网站优化排名时,需要考虑哪些问题呢?  Python文本处理实践_日志清洗解析【指导】  详解MySQL数据库的安装与密码配置