1. 引言

XMLHttpRequest、Ajax、Fetch与Axios是网页前后端交互中常见到的名词

参考MDN:Ajax - Web 开发者指南 | MDN (mozilla.org)

Ajax(Asynchronous JavaScript + XML(异步 JavaScript 和 XML)), 其本身不是一种新技术,而是一个在 2005 年被 Jesse James Garrett 提出的新术语,用来描述一种使用现有技术集合的‘新’方法,最重要的就是XMLHttpRequest

当然,曾经在前端影响力极大的jQuery中有一个ajax()方法,有时说的Ajax可能也指它

参考MDN:XMLHttpRequest - Web API 接口参考 | MDN (mozilla.org)

XMLHttpRequest(XHR)是Web浏览器的API,可以在不刷新页面的情况下请求特定 URL,获取数据,允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest 可以用于获取任何类型的数据,而不仅仅是 XML

参考MDN:Fetch API - Web API 接口参考 | MDN (mozilla.org)

Fetch是Web浏览器获取数据的API,其作用和XMLHttpRequest类似,是XMLHttpRequest的一种替代品,或者说是演进

参考Axios官网:Getting Started | Axios Docs (axios-http.com)

Axios在浏览器端是XMLHttpRequest的进一步封装,并且增加了一些特性,如支持Promise、自动转换JSON等

2. 相互关系

XMLHttpRequestFetch是浏览器交互数据的API

jQuery的ajax()方法和AxiosXMLHttpRequest的进一步封装,更为简单易用

Ajax是一个描述增量更新而不需要重载(刷新)整个页面的术语,参考MDN提到的Jesse James Garrett 在 2005 年 2 月写了这篇文章 adaptive path,文章表述了Ajax的构成:

  • standards-based presentation using XHTML and CSS;

  • dynamic display and interaction using the Document Object Model;

  • data interchange and manipulation using XML and XSLT;

  • asynchronous data retrieval using XMLHttpRequest;

  • and JavaScript binding everything together.

第四点明确了数据传输使用XMLHttpRequest,从这个角度来说,Fetch不属于Ajax的范畴

然而,参考:XMLHttpRequest vs the Fetch API for Ajax - SitePoint中提到的:

  • We now use “Ajax” as a generic term for any client-side process which fetches data from a server and updates the DOM dynamically without a full-page refresh.

随着时代的发展,Ajax泛指客户端从服务器获取数据并动态更新DOM,而无需刷新整个页面的通用术语,从这个角度来说,Fetch属于Ajax的范畴

进一步的对比可参考:

3. XMLHttpRequest的使用

参考MDN:使用 XMLHttpRequest - Web API 接口参考 | MDN (mozilla.org)

也可参考:XMLHttpRequest使用详解 - 迪米特 - 博客园 (cnblogs.com)

一个简单的XMLHttpRequest示例如下:

<script type="text/javascript">
var xhr = new XMLHttpRequest();
var formData = new FormData();
formData.append('userId', '1');
formData.append('title', 'leihou');
formData.append('body', '雷猴');
xhr.open('POST', 'http://jsonplaceholder.typicode.com/posts');
xhr.send(formData);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
console.log(xhr.responseText);
}
else {
console.log(xhr.statusText);
}
}
</script>

4. Fetch的使用

参考MDN:使用 Fetch - Web API 接口参考 | MDN (mozilla.org)

一个简单的Fetch示例如下:

<script>
fetch('http://jsonplaceholder.typicode.com/posts', {
method: 'POST',
body: JSON.stringify({
userId: '1',
title: 'leihou',
body: '雷猴'
})
})
.then(response => response.json())
.then(data => console.log(data));
</script>

5. Axios的使用

参考Axios官网:Getting Started | Axios Docs (axios-http.com)

一个简单的Axios示例如下:

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
axios.post('http://jsonplaceholder.typicode.com/posts', {
userId: '1',
title: 'leihou',
body: '雷猴'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
</script>

6. Ajax的使用

jQuery的ajax()方法参考:jQuery.ajax() | jQuery API Documentation

也可参考:jQuery Ajax - 云崖先生 - 博客园 (cnblogs.com)

一个简单的ajax示例如下:

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>
$.ajax({
url: "http://jsonplaceholder.typicode.com/posts", // 发送的路径
type: "post", // 发送方式
dataType: 'JSON', // 反序列化
data: {
userId: '1',
title: 'leihou',
body: '雷猴'
}, // 发送的数据
success: (res) => { // 成功获取到后端返回结果的回调函数
console.log(res);
},
error: () => { // 发送失败的回调函数
console.log("失败");
}
})
</script>

7. 参考资料

[1]MDN Web Docs (mozilla.org)

[2]Getting Started | Axios Docs (axios-http.com)

[3]XMLHttpRequest使用详解 - 迪米特 - 博客园 (cnblogs.com)

[4]jQuery Ajax - 云崖先生 - 博客园 (cnblogs.com)

[5]jQuery.ajax() | jQuery API Documentation

XMLHttpRequest、Ajax、Fetch与Axios的更多相关文章

  1. 理解 ajax、fetch和axios

    背景 ajax fetch.axios 优缺点 ajax基于jquery,引入时需要引入庞大的jquery库,不符合当下前端框架,于是fetch替代了ajax 由于fetch是比较底层,需要我们再次封 ...

  2. react中使用Ajax请求(axios,Fetch)

    React本身只关注于界面, 并不包含发送ajax请求的代码,前端应用需要通过ajax请求与后台进行交互(json数据),可以使用集成第三方ajax库(或自己封装) 常用的ajax请求库 jQuery ...

  3. 前后端数据交互(六)——ajax 、fetch 和 axios 优缺点及比较

    一.ajax.fetch 和 axios 简介 1.1.ajax ajax是最早出现发送后端请求的技术,属于原生 js .ajax使用源码,请点击<原生 ajax 请求详解>查看.一般使用 ...

  4. 【译】XMLHttpRequest和Fetch, 谁最适合AJAX?

    原文地址:https://www.sitepoint.com/xmlhttprequest-vs-the-fetch-api-whats-best-for-ajax-in-2019/ 目录 从AJAX ...

  5. axios ajax fetch 区别以及优缺点

    将jQuery的ajax.axios和fetch做个简单的比较,所谓仁者见仁智者见智,最终使用哪个还是自行斟酌 1.jQuery ajax $.ajax({ type: 'POST', url: ur ...

  6. ajax、fetch、axios — 请求数据

    jquery ajax jq 的ajax是对原生XHR的封装,除此以外还增添了对JSONP的支持.用起来非常方便 用法: $.ajax({ url:发送请求的地址, data:数据的拼接,//发送到服 ...

  7. react——获取数据ajax()、$.ajax()、fetch()、axios

    ajax() import React from 'react'; import ReactDom from 'react-dom'; import ajax from './tool.js'; cl ...

  8. axios ajax fetch 区别

    请求方式千千万,axios是一种对ajax的封装,fetch是一种浏览器原生实现的请求方式,跟ajax对等

  9. 原生 Ajax 封装 和 Axios 二次 封装

    AJAX 异步的JavaScript与XML技术( Asynchronous JavaScript and XML ) Ajax 不需要任何浏览器插件,能在不更新整个页面的前提下维护数据,但需要用户允 ...

  10. fetch和axios区别,proxy代理配置

    1.今天使用fetch调用接口时使用console.log(res.data)始终是undefined,使用anxios请求则可以成功请求到数据,非常奇怪,于是查了一圈,才搞明白是我自以为了,哎,浪费 ...

随机推荐

  1. Linux和shell面试内容

    一.Linux 1.列出5个常用高级命令 ps -ef ps -aux df -h top io top xargs tail uptime netstat 2.查看磁盘使用情况.查看进程.查看端口号 ...

  2. 《HTTP权威指南》– 5.Web服务器

    Web服务器概念: 实现了HTTP和相关的TCP连接处理,负责管理Web服务器提供的资源,以及对Web服务器的配置.控制及扩展方面的管理. 各种不同的形式: 通过软件Web服务器:运行在标准的.有网络 ...

  3. MVP、原型、概念验证,傻傻分不清楚?

    MVP.原型以及概念验证这三者的概念虽然没有密切的联系,但也有不少人会分不清这三者的区别,在这篇文章中,我们会帮大家区分一下这三个概念.首先是MVP,MVP是Minimum Viable Produc ...

  4. 【转载】SQL SERVER2008 修改数据库名相关的脚本

    -- 修改数据库名 -- 1.首先查找数据库是否占用,杀掉占用的id select spid from master.dbo.sysprocesses where dbid=db_id('ClothC ...

  5. python进阶之路7 数据类型的内置方法

    内容回顾 while 循环补充说明 1.死循环 2.while循环嵌套和全局标志位 for循环 1.for 变量名 in 待遍历数据 for循环体代码 2.for 也可以与break continue ...

  6. 2023牛客寒假算法基础集训营2 ABCDEFHJKL

    比赛链接 A 题解 知识点:数学. 用 \(n\) 减去区间1的端点得到匹配的一个区间,求一下与区间2的交集. 一个小公式,两区间 \([L_1,R_1]\) 和 \([L_2,R_2]\) 的交集长 ...

  7. Mysql--回顾提要

    一.写在前 知识学了就忘!不用就忘!我太健忘!特此记录!用于复习打卡!Mysql干就完事了! 二.来辣! MyISAM表把自增主键最大id记录到文件,重启也不会丢.InnoDB记录到内存,重启数据库和 ...

  8. vue3实现一个抽奖小项目

    前言 在公司年会期间我做了个抽奖小项目,我把它分享出来,有用得着的可以看下. 浏览链接:http://xisite.top/original/luck-draw/index.html 项目链接:htt ...

  9. SQL基本概念-SQL通用语法

    SQL基本概念 1.  什么是SQL ? Structured Query Language : 结构化查询语言,其实就是定义了操作所有关系型数据库的规则.每一种数据库操作的方式存在不一样的地方,称为 ...

  10. Unity之生成扫描二维码

    Unity之生成扫描二维码 Unity之生成扫描二维码 前言 开篇 Unity版本及使用插件 正题 前期准备 首先生成二维码 然后需要扫描二维码 该使用了 挂载脚本绑定按钮和输入框 运行内容 生成二维 ...