当前位置: 首页 > article >正文

fetch() 与 XMLHttpRequest 的差异

fetch() 与 XMLHttpRequest 的差异

fetch() 的功能与 XMLHttpRequest 基本相同,都是向服务器发出 HTTP 请求,但有三个主要的差异。

(1)fetch()使用 Promise,不使用回调函数,因此大大简化了写法,写起来更简洁。

(2)fetch() 采用模块化设计,API 分散在多个对象上(Response 对象、Request 对象、Headers 对象),更合理一些;相比之下,XMLHttpRequest 的 API 设计并不是很好,输入、输出、状态都在同一个接口管理,容易写出非常混乱的代码。

(3)fetch() 通过数据流(Stream 对象)处理数据,可以分块读取,有利于提高网站性能表现,减少内存占用,对于请求大文件或者网速慢的场景相当有用。XMLHttpRequest 对象不支持数据流,所有的数据全部放在缓存里,不支持分块读取,必须等待全部获取后,再一次性读取。

用法上,fetch()接受一个 URL 字符串作为参数,默认向该网址发出 GET 请求,返回一个 Promise 对象。它的基本用法如下。

fetch(url)
  .then(...)
  .catch(...)

下面是一个例子,从服务器获取 JSON 数据。

fetch('https://api.github.com/users/ruanyf')
  .then(response => response.json())
  .then(json => console.log(json))
  .catch(err => console.log('Request Failed', err)); 

上面示例中,fetch()接收到的response是一个 Stream 对象,里面的数据本例是 JSON 数据,所以使用response.json()方法,将其转为 JSON 对象。它是一个异步操作,返回一个 Promise 对象。

Promise 可以使用 await 语法改写,使得语义更清晰。

async function getJSON() {
  let url = 'https://api.github.com/users/ruanyf';
  try {
    let response = await fetch(url);
    return await response.json();
  } catch (error) {
    console.log('Request Failed', error);
  }
}

上面示例中,await 语句必须放在 try...catch 里面,这样才能捕捉异步操作中可能发生的错误。


http://www.kler.cn/a/543715.html

相关文章:

  • 分享在职同时准备系统分析师和教资考试的时间安排
  • 介绍下SpringBoot如何处理大数据量业务
  • Linux之kernel(1)系统基础理论(2)
  • 【力扣】148.排序链表
  • NO.13十六届蓝桥杯备战|条件操作符|三目操作符|逻辑操作符|!||||(C++)
  • SwiftUI 中 .overlay 两种写法的区别及拓展
  • KVM虚拟化快速入门,最佳的开源可商用虚拟化平台
  • http常用状态码
  • 政策赋能科技服务,CES Asia 2025将展北京科技新貌
  • 零信任网络安全
  • 川翔云电脑是什么?租电脑?
  • 排序合集之快排详解(二)
  • python-leetcode 27.合并两个有序链表
  • DeepSeek让VScode编程起飞
  • HTTP/2 由来及特性
  • mysql8.0使用MGR实现高可用与利用MySQL Router构建读写分离MGR集群
  • Linux Media 子系统 V4l2
  • [概率论] 随机变量
  • 【Elasticsearch】constant_score
  • 百度舆情优化:百度下拉框中的负面如何清除?
  • 【Elasticsearch】Bucket Correlation Aggregation(桶相关性聚合)
  • 期权帮 | 聊一聊股指期货交割是什么意思?
  • Python3创建虚拟环境
  • 今日AI和商界事件(2025-02-12)
  • 网络安全要学python 、爬虫吗
  • Arduino 多舵机控制:状态机实现多舵机同步动作