XMLHttpRequest 和 Fetch ,该用哪个?

2024-01-28 17:16:41 +08:00
 Leon6868

如题,XMLHttpRequest 可以用 promis 包装为异步并提供更多的功能(取消请求、进度条),但是普通请求中 fetch 比 XMLHttpRequest 更简单,请问该如何选择呢?

3575 次点击
所在节点    JavaScript
19 条回复
ashong
2024-01-28 17:18:10 +08:00
不追求古早浏览器兼容性就用 fetch 吧
lalalaqwer
2024-01-28 17:20:03 +08:00
随便吧,反正很多时候都要自己再包装一个相关的请求函数的
huiyifyj
2024-01-28 17:25:22 +08:00
https://caniuse.com/fetch

大部分浏览器 16 年后就支持得差不多了,现在已经是 24 年了
ysc3839
2024-01-28 17:44:57 +08:00
fetch 也能取消吧?进度的话好像也是有流式读取的接口,也可以实现。
codehz
2024-01-28 17:52:07 +08:00
fetch 可以用 abort controller 取消,上传进度比较麻烦,要自己拼接一个 readable stream
Leon6868
2024-01-28 17:55:05 +08:00
@ysc3839 #4
@codehz #5
abort controller 设计挺丑陋的,不如 abort()
humbass
2024-01-28 20:31:24 +08:00
涉及到上传进度确实是一个问题,我现在是 nodejs 后端回传进度。
angrylid
2024-01-28 20:45:55 +08:00
难道实际开发不都是用 axios 或者 xx query 吗...
Dragonphy
2024-01-28 21:03:15 +08:00
Seanfuck
2024-01-28 21:40:11 +08:00
如果 fetch 需要包装起来用的话,那不如用 XMLHttpRequest
changdy
2024-01-28 22:21:33 +08:00
几年不玩前端了..记得有人吐槽过 fetch 并不原生支持超时断开之类的
zhuangzhuang1988
2024-01-28 22:42:59 +08:00
一直 axios
gxm44
2024-01-28 23:26:10 +08:00
axios
jackxx274
2024-01-28 23:41:31 +08:00
感觉现在更多用的是 axios ,进度条我以前用 nprogress 实现过
JounQin
2024-01-29 00:51:56 +08:00
https://github.com/un-ts/x-fetch

刚写的精简 fetch wrapper
stimw
2024-01-29 01:23:25 +08:00
fetch 的优点就是原生、简单,没必要包,像楼上说的,真要包不如直接用 axios 。
cslive
2024-01-29 07:00:29 +08:00
试试 rxjs
tsai2zeyong
2024-01-29 11:40:55 +08:00
写个测试/玩具啥的,哪个简单/哪个有用用哪个,正儿八经的产品项目还是用三方库比较好。
cleveryun
2024-01-29 13:12:00 +08:00
axios 实际也是包的 XMLHttpRequest 。

fetch 只是 API 比 XMLHttpRequest 新,原生支持 promise ,并没有啥优势。具体落实到项目里,不管用哪个,都是要包一下的(请求头上携带 token ,无权限时跳登录页等通用逻辑),原生不支持 promise 的也都会 new Promise 处理一下转成 promise ,等于没有区别。

XMLHttpRequest 因为自带的 API 更多一些,其实更好用一些。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1012202

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX