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

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

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

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

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

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

    XMLHttpRequest 因为自带的 API 更多一些,其实更好用一些。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1085 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:03 · PVG 03:03 · LAX 11:03 · JFK 14:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.