全面分析前端的网络请求方式(对ajax理解的勘误)

news2024/11/27 6:12:41

文章目录

  • 前言
  • Ajax
  • Fetch
  • Axios
  • 三者关系

前言

在掘金看到一篇关于ajax和fetch以及aixos的文章,才发现自己对ajax的理解是错误的,一直以为ajax就是js中xhr对象,把他们两之间画上了等号,殊不知从根本上就理解错了。
这里就不对原生的xhr和jQuery中的ajax封装进行分析了,如果要了解则看第二个链接,里面有
在这里插入图片描述

所以就决定重新梳理一遍前端中使用到的网络请求方式,真的弄懂,也作为自己的八股,因为我感觉这一块肯定是重点!

参考文章:

你知道Ajax、Fetch、Axios三者的区别吗? - 掘金 (juejin.cn)

全面分析前端的网络请求方式 - 掘金 (juejin.cn)
用到了文章里的很多图片和代码

Ajax

一种技术思想
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,让我们轻松实现网页与服务器之间的数据交互。
Ajax 是一个技术统称,是一个概念模型它囊括了很多技术,并不特指某一技术,它很重要的特性之一就是让页面实现局部刷新。
简单来说,Ajax 是一种思想,XMLHttpRequest 只是实现 Ajax 的一种方式。
利用 XMLHttpRequest 模块实现 Ajax。

<body>
  <script>
    function ajax(url) {
      const xhr = new XMLHttpRequest();
      xhr.open("get", url, false);
      xhr.onreadystatechange = function () {
        // 异步回调函数
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            console.info("响应结果", xhr.response)
          }
        }
      }
      xhr.send(null);
    }
    ajax('https://smallpig.site/api/category/getCategory')
  </script>
</body>

输出结果:
在这里插入图片描述
在这里插入图片描述

这里也放上我之前对ajax的理解

Fetch

一个API
在这里插入图片描述
示例代码:

<body>
  <script>
    function ajaxFetch(url) {
      fetch(url).then(res => res.json()).then(data => {
        console.info(data)
      })
    }
    ajaxFetch('https://smallpig.site/api/category/getCategory')
  </script>
</body>

在这里插入图片描述
上段代码利用 Fetch 发送了一个最简单的 get 请求,其中最重要的特点之一就是采用了.then 链式调用的方式处理结果,这样不仅利于代码的可读,而且也解决了回调地狱的问题。

一个基本的 fetch请求:

const options = {
    method: "POST", // 请求参数
    headers: { "Content-Type": "application/json"}, // 设置请求头
    body: JSON.stringify({name:'123'}), // 请求参数
    credentials: "same-origin", // cookie设置
    mode: "cors", // 跨域
}
fetch('http://www.xxx.com',options)
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(myJson); // 响应数据
  })
  .catch(function(err){
    console.log(err); // 异常处理
  })

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Axios

Axios 是随着 Vue 的兴起而被广泛使用的,目前来说,绝大多数的 Vue 项目中的网络请求都是利用 Axios 发起的。当然它并不是一个思想,或者一个原生 API,它是一个封装库
特别注意:

axios是一个顶层的封装库,底层可以选择xhr或者fetch进行请求
axios不是xhr的子集,axios利用xhr进行了二次封装的请求库,xhr只是axios中的其中一个请求适配器,axios在nodejs端还有个http的请求适配器;axios= xhr + http;axios本身就是独立的请求库。

在这里插入图片描述
示例代码:

// 发送 POST 请求
axios({
    method: 'post',
    url: '/user/12345',
    data: {
        firstName: 'Fred',
        lastName: 'Flintstone'
    }
})

三者关系

ajax是js异步技术的术语,早起相关的api是xhr,它是一个术语。
fetch是es6新增的用于网络请求标准api,它是一个api。
axios是用于网络请求的第三方库,它是一个库。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/364670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

疯狂的SOVA:Android银行木马“新标杆”

2021年8月初&#xff0c;一款针对Android银行APP的恶意软件出现在人们的视野中&#xff0c;ThreatFabric 安全研究人员首次发现了这一木马&#xff0c;在其C2服务器的登录面板&#xff0c;研究人员发现&#xff0c;攻击者将其称之为SOVA。 ** SO** ** V** ** A简介** 在俄语中…

Mac Maven环境搭建安装和配置详细步骤

一、Maven简介Maven 是 Apache 软件基金会的一个开源项目,是一个优秀的项目构建工具,它用来帮助开发者管理项目中的 jar,以及 jar 之间的依赖关系、完成项目的编译、测试、打包和发布等工作。二、Mavende优点1、原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/l…

产品经理必懂的技术知识

API 是不是经常听见程序猿小哥哥A说&#xff1a;“这个简单&#xff0c;直接调用现成的接口就可实现。 一会儿程序猿小哥哥B说&#xff1a;“你这个不行&#xff0c;我们的第三方服务接口不支持。” 此时你的心里活动&#xff1a;API ≈ 听不懂 啥子是接口哦&#xff1f;接口…

git合并分支

在复杂系统的开发过程中&#xff0c;我们经常需要通过不同的功能或环境分支来进行管理&#xff0c;那么开发阶段完成时&#xff0c;还需要进行合并&#xff0c;下边分享一下合并的流程&#xff1a;首先确保要合并的两个分支 本地分支与远程分支一致可以通过IDEA切换对应分支拉取…

【已解决】解决IDEA的maven刷新依赖时出现Connot reconnect错误

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01;也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&#…

SAP分析云2023年第一季度亮点更新介绍

本文介绍了SAP分析云2023年第1季度的季度发布&#xff08;QRC&#xff09;新功能和增强功能。较于以往的版本&#xff0c;这次的更新在系统管理和服务管理、增强分析、业务内容交付、仪表盘和故事设计、Microsoft集成等方面做了产品的功能更新改进。那就和阿拓一起看看吧&#…

工作中,python真的有用吗?

普通上班族学Python有用吗&#xff1f; 那么&#xff0c;我也在这里提出一个问题&#xff1a;Python究竟适不适合办公人士来学习&#xff0c;以及学了之后究竟能不能给我的工作来带质一般的飞跃&#xff1f; 以我的亲身经历为例&#xff0c;我可以很负责的告诉大家&#xff0c…

Liunx服务器安装SVN

一、下载svn安装包链接&#xff1a;https://pan.baidu.com/s/1gkS0tef2kQP6nvXOS64hUw 提取码&#xff1a;cyuw二、SVN安装部署通过sftp将文件拉取到目的主机路径&#xff1a;/usr/package 跳转文件路径: cd /usr/package 执行解压命令:tar -zxvf subversion-1.14.2.tar.gz 执行…

Mysql的安装、语法、优化

1 数据库 数据库是存储数据&#xff0c;管理数据的仓库。 常见的数据库有两种&#xff1a; 关系型数据库&#xff1a;数据关系紧密。关系模型是二维表格模型&#xff0c;一个关系型数据库就是由二维表及其之间的关系组成的一个数据集合。 Oracle、MySQL、SQLServer、Access…

基础算法一:同向双指针

同向双指针——滑动窗口 讲解实例&#xff1a;LeetCode209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合…

二叉树、二叉搜索树、二叉树的最近祖先、二叉树的层序遍历【零神基础精讲】

来源0x3f&#xff1a;https://space.bilibili.com/206214 文章目录二叉树[104. 二叉树的最大深度](https://leetcode.cn/problems/maximum-depth-of-binary-tree/)[111. 二叉树的最小深度](https://leetcode.cn/problems/minimum-depth-of-binary-tree/)[129. 求根节点到叶节点…

工时表软件在项目中的作用 帮助企业管理项目成员的工时

企业的不断发展离不开每一个成功交付的项目&#xff0c;但在任何一个项目中&#xff0c;人力成本是主要的成本之一&#xff0c;员工的工作效率高低影响着项目成本和质量的关键点。如果想要降低整个项目的成本那就需要对员工工时更加精准的把控&#xff0c;所以规范管理员工时间…

文 件 操 作

程序运行时产生的数据都属于临时数据&#xff0c;程序一旦运行结束都会被释放通过文件可以将数据持久化C中对文件操作需要包含头文件< fstream >文件类型分为两种:1.文本文件&#xff1a; 文件以文本的AScII码形式存储在计算机中2.二进制文件&#xff1a; 文件以文本的二…

java反序列化基础

序列化与反序列化 1、概述 序列化是让Java对象脱离Java运行环境的一种手段&#xff0c;可以有效的实现多平台之间的通信、对象持久化存储。 Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中&#xff0c;ObjectOutputStream类的writeObject(…

计算几何原理与例题

目录 一、前言 二、简单几何 1、平面切分&#xff08;2020年省赛&#xff0c;lanqiaoOJ题号503&#xff09; 2、三角形的面积&#xff08;lanqiaoOJ题号1231&#xff09; 3、点和直线关系&#xff08;lanqiao0J题号1240&#xff09; 4、点和线段关系&#xff08;lanqiaoO…

活动回顾丨研发效能度量线下沙龙圆满举办

2月18日&#xff0c;由跬智信息&#xff08;Kyligence&#xff09;联合甄知科技主办的研发效能度量线下沙龙圆满举办。本次沙龙在 Kyligence 上海总部举办&#xff0c;Kyligence 联合创始人兼 CTO 李扬、腾讯 Tech Lead 茹炳晟&#xff0c;以及甄知科技创始人兼 CTO 张礼军在现…

ClickHouse学习笔记(一):ClickHouse架构概述(为什么ClickHouse这么快呢?)

文章目录1、ClickHouse 概述1.1 、简述1.2 、名词解释1.2.1 、MPP 架构1.2.2 、向量化执行引擎1.2.3 、SIMD1.2.4 、OLAP1.3、应用场景2、ClickHouse 核心特性2.1、完备的 DBMS 功能2.2、列式存储与数据压缩2.3、向量化执行引擎2.4、关系模型与SQL查询2.5、多样化的表引擎2.6、…

简单的C++:【运算符重载】新手易学

学过C语言的同志们应该都知道位运算符>> 和 << &#xff08;右移左移&#xff09;&#xff0c;但是这两个运算符在C中还是我们的输入和输出流操作符&#xff0c;那么这是为什么呢&#xff1f;&#xff0c;了解完本篇文章之后&#xff0c;我们再来回答这个问题。 C为…

python和C++代码实现模拟动态指针时钟

一、python代码实现及turtle库简单介绍 桌面时钟项目描述 1、使用turtle库绘制时钟外形及表针&#xff1b; 2、使用datetime获取系统时间&#xff1b; 3、时钟动态显示 turtle库基本命令 1、turtle.setup()函数&#xff1a;用于启动一个图形窗口&#xff0c;它有四个参数…

2023-02-22干活小计

复现BERT&#xff1a; 只能说爷今天干了一上午一下午的代码 bert的输入&#xff1a; batch_size * max_len * emb_num 768 * 768 bert的输出&#xff1a;三维字符级别特征(NER可能就更适合) 二维篇章级别特征(比如文本分类可能就更适合) batch_size * max_len * emb_num, ba…