XMLHttpRequest 和 Fetch ,该用哪个? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
Leon6868
V2EX    Javascript

XMLHttpRequest 和 Fetch ,该用哪个?

  •  1
     
  •   Leon6868 2024-01-28 17:16:41 +08:00 4093 次点击
    这是一个创建于 621 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    19 条回复    2024-01-29 13:12:00 +08:00
    ashong
        1
    ashong  
       2024-01-28 17:18:10 +08:00 via iPhone
    不追求古早浏览器兼容性就用 fetch 吧
    lalalaqwer
        2
    lalalaqwer  
       2024-01-28 17:20:03 +08:00
    随便吧,反正很多时候都要自己再包装一个相关的请求函数的
    fengyj
        3
    fengyj  
       2024-01-28 17:25:22 +08:00
    https://caniuse.com/fetch

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

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

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

    XMLHttpRequest 因为自带的 API 更多一些,其实更好用一些。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6059 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 02:37 PVG 10:37 LAX 19:37 JFK 22:37
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86