网站首页 > 技术文章 正文
JavaScript 初学者学完语法,进入实际的网页编程,一定有人告诉你,要掌握一个叫做 XMLHttpRequest 的东西。
脚本都靠它发出 HTTP 请求,跟服务器通信。所谓的 AJAX 操作就是基于它实现的。要是没有它,就不会有单页应用。
这个 XMLHttpRequest 对象,不仅名字怪,用法也非常独特。
let xhr = new XMLHttpRequest;
xhr.open('GET', url)
xhr.onload = function {
if (this.status === 200) {
let data = JSON.parse(this.responseText);
console.log(data);
}
};
xhr.onerror = function (err) {
console.log('Error Occurred :', err);
}
xhr.send;
就是因为写起来麻烦,实际开发中,往往使用它的各种封装库,比如早期的 jQuery。
$.get("test.php", function (data) {
$("body")
.append("Name: " + data.name)
.append("Time: " + data.time);
}, "json");
早期的封装库都使用回调函数,很不直观。后来的封装库都改用 Promise 的写法,比如 axios。
axios.get('/user?ID=12345')
.then(function (response) {
// handle success
console.log(response);
})
.catch(function (error) {
// handle error
console.log(error);
})
这样用起来,确实方便了,但是需要加载外部库,而它又是一个天天用到的基本需求。所以,浏览器厂商最终决定,抛弃 XMLHttpRequest,另起炉灶,重写一套全新的 API,内置在浏览器里面。
这就是 Fetch API,它使用fetch
发出请求,返回的是 Promise 对象。
fetch('https://api.github.com/users/ruanyf')
.then(response => response.json)
.then(json => console.log(json))
.catch(err => console.log('Request Failed', err));
Promise 可以使用 await 语法,表达起来跟同步操作一模一样。
async function getJSON {
let url = 'https://api.github.com/users/ruanyf';
try {
let response = await fetch(url);
return await response.json;
} catch (error) {
console.log('Request Failed', error);
}
}
Fetch API 的优点是写法简单,缺点是这个 API 包含的内容非常多,想要完全掌握并不容易。
我一直想写一篇教程,完整介绍它的各种用法,便于自己使用的时候查找。现在终于写出来,以后可以告别 XMLHttpRequest 了。
http://www.ruanyifeng.com/blog/2020/12/fetch-tutorial.html
(完)
猜你喜欢
- 2025-07-09 跨域资源的共享(CORS)N种用法(跨域资源共享的缩写是?)
- 2025-07-09 Axios CORS 问题处理(axios has been blocked by cors policy)
- 2025-07-09 JavaScript-JavaScript 219
- 2025-07-09 前端面试题《AJAX》(前端面试题js)
- 2025-07-09 某水果网站逆向分析(水果销售网站的设计与实现)
- 2025-07-09 揭秘:视频播放网站如何精准记录用户观看进度
- 2025-07-09 国外友人开创Python模拟登陆神库,完美修改它为咱们所用
- 2025-07-09 Ajax异步JavaScript和XML(ajax异步原理)
- 2025-07-09 2021年超详细的java学习路线总结—纯干货分享
- 2025-07-09 webapi 全流程(webapi怎么部署)
- 1509℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 534℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 496℃MySQL service启动脚本浅析(r12笔记第59天)
- 475℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 473℃启用MySQL查询缓存(mysql8.0查询缓存)
- 453℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 432℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 430℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- chromepost (65)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- linux删除一个文件夹 (65)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)