V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Leon6868

XMLHttpRequest 和 Fetch ,该用哪个?

  •  1
     
  •   Leon6868 · Jan 28, 2024 · 4670 views
    This topic created in 832 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    XMLHttpRequest 因为自带的 API 更多一些,其实更好用一些。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3057 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 767ms · UTC 14:15 · PVG 22:15 · LAX 07:15 · JFK 10:15
    ♥ Do have faith in what you're doing.