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 · 3574 次点击
    这是一个创建于 368 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,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
    随便吧,反正很多时候都要自己再包装一个相关的请求函数的
    huiyifyj
        3
    huiyifyj  
       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
        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 后端回传进度。
    angrylid
        8
    angrylid  
       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   ·   实用小工具   ·   1995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:39 · PVG 22:39 · LAX 06:39 · JFK 09:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.