ajax、axios、fetch之间的区别与联系

2023-11-11

整理ajax、axios、fetch优缺点

简单总结

  • JavaScript是一门前端语言
  • AJAX是一门技术,它提供了异步更新的机制,使客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。
  • jQuery是一个框架,它对JavaScript进行了封装,使得JavaScript更加方便使用。jQuery使得JavaScript和AJAX的使用更加方便。

AJAX

https://www.w3school.com.cn/ajax/index.asp 

AJAX(Asynchronous JavaScript and XML)(异步的 JavaScript 和 XML)。AJAX不是新的编程语言,而是一种使用现有标准的新方法。AJAX 是一种在无需重新加载整个网页的情况下,通过后台与服务器进行少量数据交换,能够异步更新部分网页的技术。传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。XMLHttpRequest 是 AJAX 的基础。

var xmlhttp;
if (window.XMLHttpRequest) {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp = new XMLHttpRequest();
} else {
  // code for IE6, IE5
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST", 'http://xxx', true);
// 如果需要像 HTML 表单那样 POST 数据,使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send("name=小王&age=18");
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
  } else {
    console.error("请求错误");
  }
}

jQuery ajax

jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互。这里的 ajax 是jQuery库里面封装好的函数,是对原生XHR的封装,除此以外还增添了对JSONP的支持。

$.ajax({
   type: 'POST',
   url: 'http://xxx',
   data: {
        name: '小王',
        age: '18'
   },
   success: function () {},
   error: function () {}
});

优缺点:

  • 本身是针对MVC的编程,不符合现在前端MVVM的浪潮
  • 基于原生的XHR开发,XHR本身的架构不清晰,已经有了fetch的替代方案
  • JQuery整个项目太大,单纯使用ajax却要引入整个JQuery非常的不合理(采取个性化打包的方案又不能享受CDN服务)

尽管JQuery对我们前端的开发工作曾有着(现在也仍然有着)深远的影响,但是我们可以看到随着VUE,REACT新一代框架的兴起,以及ES规范的完善,更多API的更新,JQuery这种大而全的JS库,未来的路会越走越窄。

axios

axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端

axios({
    method: 'post',
    url: url,
    data: {
        name: '小王',
        age: '18'
    }
})
.then(function (response) {
    console.log(response);
})
.catch(function (error) {
    console.log(error);
});

Vue2.0之后,推荐大家用axios替换JQuery ajax,让Axios进入了很多人的目光中。Axios本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范

  • 从浏览器中创建 XMLHttpRequest
  • 从 node.js 发出 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防止CSRF/XSRF

这个支持防止CSRF其实挺好玩的,是怎么做到的呢,就是让你的每个请求都带一个从cookie中拿到的key, 根据浏览器同源策略,假冒的网站是拿不到你cookie中得key的,这样,后台就可以轻松辨别出这个请求是否是用户在假冒网站上的误导输入,从而采取正确的策略。

Axios既提供了并发的封装,也没有下文会提到的fetch的各种问题,而且体积也较小,当之无愧现在最应该选用的请求的方式。

fetch

fetch号称是AJAX的替代品,可以参考《传统 Ajax 已死,Fetch 永生

  • 符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里
  • 更好更方便的写法
try {
  let response = await fetch(url);
  let data = response.json();
  console.log(data);
} catch(e) {
  console.log("Oops, error", e);
}

优缺点:

  • 符合关注分离,没有将输入、输出和用事件来跟踪的状态混杂在一个对象里
  • 更好更方便的写法
  • 更加底层,提供的API丰富(request, response)
  • 脱离了XHR,是ES规范里新的实现方式

fetch是一个低层次的API,你可以把它考虑成原生的XHR,所以使用起来并不是那么舒服,需要进行封装,例如:

  • fetch只对网络请求报错,对400,500都当做成功的请求,需要封装去处理
  • fetch默认不会带cookie,需要添加配置项
  • fetch不支持abort,不支持超时控制,使用setTimeout及Promise.reject的实现的超时控制并不能阻止请求过程继续在后台运行,造成了量的浪费
  • fetch没有办法原生监测请求的进度,而XHR可以
  • https://segmentfault.com/a/1190000012836882
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ajax、axios、fetch之间的区别与联系 的相关文章

随机推荐

  • java---实现3D山脉模型

    核心理念 递归 其实3D山脉基本思路可以认为是平面山脉和谢冰斯基三角形的结合体 敲代码之前请大家先了解一个取中点时第一个技巧 即取两个点中点时需要让中点的横坐标或纵坐标或同时减或加上一个极小的随机值 来产生山脉连绵起伏的效果 我通过查阅相关
  • STM32—ADC多通道采集电压

    文章目录 ADC详解 程序说明 函数主体 引脚配置 ADC和DMA配置 主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息 这篇博客是对ADC内容的一个总结提升 ADC的详细介绍 ADC详解 程序说明 为了使这次代码阅读
  • React 中的组件实例和类实例

    import React from react import ReactDOM from react dom 函数组件 function Hello1 return h1 Hello Word h1 const Hello2 gt h2 H
  • 【业务功能110】微服务-springcloud-springboot-Kubernetes集群部署-kubeadm极速部署-Docker安装

    kubeadm极速部署Kubernetes 1 24版本集群 一 Kubernetes 1 24版本集群部署 1 1 Kubernetes 1 24版本集群部署环境准备 1 1 1 主机操作系统说明 序号 操作系统及版本 备注 1 Cent
  • [Go 夜读 第 139 期] Go 语言 Excelize 开源基础库介绍

    Excelize 是 Go 语言编写的用于操作电子表格文档的基础库 支持 XLAM XLSM XLSX XLTM XLTX 等多种文档格式 高度兼容带有样式 图片 表 透视表 切片器等复杂组件的文档 并提供流式读写支持 用于处理包含大规模数
  • ERROR/WindowManager(***): Activity *** has leaked window com.android.internal.policy.impl.PhoneWind

    在做项目是遇到这个错误 google WindowManager Activity has leaked window 在stackoverflow com 链接http stackoverflow com questions 285057
  • Revit二次开发之“取得元素相交点IntersectionResultArray通过LocationCurve.Intersect()”...

    1 取得元素的曲线 比如风管 LocationCurve元素曲线 LocationCurve curve duct Location as LocationCurve 取得可以根据曲线确定位置的元素的曲线 2 根据曲线取得交点 Inters
  • 百度离线地图开发

    2D离线地图介绍 局域网环境下部署 完全脱离互联网 通过下载瓦片图 离线地图API js库 方式实现 一 2D离线瓦片下载 通过瓦片下载软件实现离线瓦片的下载 1 普通街道图瓦片 如下图 2 个性化瓦片 如下图 3 卫星图影像瓦片 如下图
  • Python学习:Selenuim+Python元素定位总结

    对象的定位应该是自动化测试的核心 要想操作一个对象 首先应该识别这个对象 一个对象就是一个人一样 他会有各种的特征 属性 如比我们可以通过一个人的身份证号 姓名 或者他住在哪个街道 楼层 门牌找到这 个人 那么一个对象也有类似的属性 我们可
  • Go语言学习-基本

    命名 如果是在函数外部定义 那么将在当前包的所有文件中都可以访问 名字的开头字母的大小写决定了名字在包外的可见性 如果一个名字是大写字母开头的 译注 必须是在函数外部定义的包级名字 包级函数名本身也是包级名字 那么它将是导出的 也就是说可以
  • 快速排序的递归实现和非递归实现

    一 快速排序的递归实现 快速排序的思想是每次找到一个元素的位置 再在以这个元素分隔的两个子范围中分别再各自确定一个元素的位置 子子范围也是如此操作 当某个子范围只有一个元素或者没有元素时 便不再做任何操作 这是一个递归过程 递归退出的边界就
  • 怎么判断map不为空

    示例代码 public static void main String args Map
  • (Oracle 基础篇) SQL 基础

    什么是SQL SQL 结构化查询语言 的主要功能就是在各种数据库建立联系 进行沟通 SQL语言分类 1 定义要在数据库存储那些信息的数据定义语言 DDL 主要针对对象 数据表 视图和索引 2 对数据库中的表进行操作的数据操作语言 DML 主
  • 视觉里程计2

    1 前言 为了克服特征点法的缺点 提出了以下几种思路 1 光流法 2 直接法 2 光流 2 1直接法 优化 最小化光度误差 实际上就是寻找全局像素误差总和最小的的情况 这种优化的理由仍然是灰度不变假设
  • Python函数练习题

    函数部分 1 编写一个名为collatz 的函数 它有一个名为number的参数 如果参数是偶数 那么collatz 就打印出number 2 如果number是奇数 collatz 就打印3 number 1 def collatz nu
  • javaee用户注册和登录界面源码

    JavaEE是一个企业级的 Java 应用程序开发平台 它提供了一组标准的技术和工具来帮助开发人员快速构建和部署企业级的 Java 应用程序 在 JavaEE 中 用户注册和登录界面可以使用 JSP Java Server Pages 技术
  • html文件存储服务,HTML5中五种存储方式的介绍

    本篇文章给大家带来的内容是关于HTML5中五种存储方式的介绍 有一定的参考价值 有需要的朋友可以参考一下 希望对你有所帮助 h5之前 存储主要是用cookies cookies缺点有在请求头上带着数据 大小是4k之内 主Domain污染 主
  • pandas.DataFrame.groupby 按某列类型值将文件分为多个文件

    1 groupby pandas DataFrame groupby groupby函数使用映射器或一系列列对数据帧进行分组 groupby操作涉及拆分对象 应用函数和组合结果的某种组合 这可以用于对大量数据进行分组 并对这些分组进行计算操
  • 若依开发时指定el-dialog局部显示的方法

    第一步 实例化一个 el dialog 最外面的div就是ei dialog要显示的位置 div div
  • ajax、axios、fetch之间的区别与联系

    整理ajax axios fetch优缺点 简单总结 JavaScript是一门前端语言 AJAX是一门技术 它提供了异步更新的机制 使客户端与服务器间交换数据而非整个页面文档 实现页面的局部更新 jQuery是一个框架 它对JavaScr