XMLHttpRequest、Ajax、Fetch与Axios
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. 相互关系
XMLHttpRequest
和Fetch
是浏览器交互数据的API
jQuery的ajax()
方法和Axios
是XMLHttpRequest
的进一步封装,更为简单易用
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. 参考资料
[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的更多相关文章
- 理解 ajax、fetch和axios
背景 ajax fetch.axios 优缺点 ajax基于jquery,引入时需要引入庞大的jquery库,不符合当下前端框架,于是fetch替代了ajax 由于fetch是比较底层,需要我们再次封 ...
- react中使用Ajax请求(axios,Fetch)
React本身只关注于界面, 并不包含发送ajax请求的代码,前端应用需要通过ajax请求与后台进行交互(json数据),可以使用集成第三方ajax库(或自己封装) 常用的ajax请求库 jQuery ...
- 前后端数据交互(六)——ajax 、fetch 和 axios 优缺点及比较
一.ajax.fetch 和 axios 简介 1.1.ajax ajax是最早出现发送后端请求的技术,属于原生 js .ajax使用源码,请点击<原生 ajax 请求详解>查看.一般使用 ...
- 【译】XMLHttpRequest和Fetch, 谁最适合AJAX?
原文地址:https://www.sitepoint.com/xmlhttprequest-vs-the-fetch-api-whats-best-for-ajax-in-2019/ 目录 从AJAX ...
- axios ajax fetch 区别以及优缺点
将jQuery的ajax.axios和fetch做个简单的比较,所谓仁者见仁智者见智,最终使用哪个还是自行斟酌 1.jQuery ajax $.ajax({ type: 'POST', url: ur ...
- ajax、fetch、axios — 请求数据
jquery ajax jq 的ajax是对原生XHR的封装,除此以外还增添了对JSONP的支持.用起来非常方便 用法: $.ajax({ url:发送请求的地址, data:数据的拼接,//发送到服 ...
- react——获取数据ajax()、$.ajax()、fetch()、axios
ajax() import React from 'react'; import ReactDom from 'react-dom'; import ajax from './tool.js'; cl ...
- axios ajax fetch 区别
请求方式千千万,axios是一种对ajax的封装,fetch是一种浏览器原生实现的请求方式,跟ajax对等
- 原生 Ajax 封装 和 Axios 二次 封装
AJAX 异步的JavaScript与XML技术( Asynchronous JavaScript and XML ) Ajax 不需要任何浏览器插件,能在不更新整个页面的前提下维护数据,但需要用户允 ...
- fetch和axios区别,proxy代理配置
1.今天使用fetch调用接口时使用console.log(res.data)始终是undefined,使用anxios请求则可以成功请求到数据,非常奇怪,于是查了一圈,才搞明白是我自以为了,哎,浪费 ...
随机推荐
- js逆向之补环境常用代码
//第一种 补环境的方法 let test1 = { name:"小红" }; test = new Proxy(test1,{ get(target,key){ console. ...
- Kubernetes(k8s)存储管理之数据卷volumes(二):hostPath数据卷
目录 一.系统环境 二.前言 三.hostPath数据卷 3.1 hostPath数据卷概览 3.2 创建有hostPath卷的pod 一.系统环境 服务器版本 docker软件版本 Kubernet ...
- 想做长期的 AB 实验?快来看看这些坑你踩了没
作者:江颢 1.什么是长期的 AB 实验 大部分情况下,我们做的 AB 实验都是短期的,一到两周或者一个月之内的,通过分析这段时期内测得的实验效应得出实验结论,并最终进行推广. 长期实验即运行时间达数 ...
- 分支路径图调度框架在 vivo 效果广告业务的落地实践
作者:vivo 互联网AI团队- Liu Zuocheng.Zhou Baojian 本文根据周保建老师在"2022 vivo开发者大会"现场演讲内容整理而成.公众号回复[2022 ...
- day09-功能实现08
家居网购项目实现08 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 19.功能18-添加家居到购物车 19.1需求分析/图解 ...
- 【开源】基于.net6+gtksharp实现的Linux下的图形界面串口调试工具
背景 22年初从上家互联网公司离职以后,充分认识到互联网行业的风险,公司在没有自身稳定产品的情况下,互联网行业就是一个烧钱的行业,支出远远大于收入来源,上家公司就是如此,12年的公司转瞬间轰然倒地,1 ...
- 《HelloGitHub》第 81 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- 深入理解 Linux 物理内存分配全链路实现
前文回顾 在上篇文章 <深入理解 Linux 物理内存管理>中,笔者详细的为大家介绍了 Linux 内核如何对物理内存进行管理以及相关的一些内核数据结构. 在介绍物理内存管理之前,笔者先从 ...
- gRPC入门与实操(.NET篇)
为什么选择 gRPC 历史 长久以来,我们在前后端交互时使用WebApi + JSON方式,后端服务之间调用同样如此(或者更久远之前的WCF + XML方式).WebApi + JSON 是优选的,很 ...
- 区块链特辑——solidity语言基础(三)
Solidity语法基础学习 五.映射类型: 映射型态 Mapping Type 映射钥匙Key → 真实资料 Value mapping(KeyType → ValueType) VariableN ...