推荐关注
› 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 · 5489 views
    This topic created in 1018 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
    ashong
    Jan 28, 2024 via iPhone
    1
    不追求古早浏览器兼容性就用 fetch 吧
    lalalaqwer
    lalalaqwer
    Jan 28, 2024
    2
    随便吧,反正很多时候都要自己再包装一个相关的请求函数的
    fengyj
    fengyj
    Jan 28, 2024
    3
    https://caniuse.com/fetch

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

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

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

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