首页 > 编程语言 >javascript基础从小白到高手系列一千九百二十四:Fetch API

javascript基础从小白到高手系列一千九百二十四:Fetch API

时间:2024-09-02 23:54:55浏览次数:14  
标签:console log 请求 javascript fetch API bar response 白到

Fetch API 能够执行XMLHttpRequest 对象的所有任务,但更容易使用,接口也更现代化,能够在
Web 工作线程等现代Web 工具中使用。XMLHttpRequest 可以选择异步,而Fetch API 则必须是异步。
Fetch API 是WHATWG 的一个“活标准”(living standard),用规范原文说,就是“Fetch 标准定义请求、
响应,以及绑定二者的流程:获取(fetch)”。
Fetch API 本身是使用JavaScript 请求资源的优秀工具,同时这个API 也能够应用在服务线程
(service worker)中,提供拦截、重定向和修改通过fetch()生成的请求接口。
基本用法
fetch()方法是暴露在全局作用域中的,包括主页面执行线程、模块和工作线程。调用这个方法,
浏览器就会向给定URL 发送请求。

  1. 分派请求
    fetch()只有一个必需的参数input。多数情况下,这个参数是要获取资源的URL。这个方法返回
    一个期约:
    let r = fetch(‘/bar’);
    console.log®; // Promise
    URL 的格式(相对路径、绝对路径等)的解释与XHR 对象一样。
    请求完成、资源可用时,期约会解决为一个Response 对象。这个对象是API 的封装,可以通过它
    取得相应资源。获取资源要使用这个对象的属性和方法,掌握响应的情况并将负载转换为有用的形式,
    如下所示:
    fetch(‘bar.txt’)
    .then((response) => {
    console.log(response);
    });
    // Response { type: “basic”, url: … }
    读取响应
    读取响应内容的最简单方式是取得纯文本格式的内容,这要用到text()方法。这个方法返回一个
    期约,会解决为取得资源的完整内容:
    fetch(‘bar.txt’)
    .then((response) => {
    response.text().then((data) => {
    console.log(data);
    });
    });
    // bar.txt 的内容
    内容的结构通常是打平的:
    fetch(‘bar.txt’)
    .then((response) => response.text())
    .then((data) => console.log(data));
    // bar.txt 的内容
    处理状态码和请求失败
    Fetch API 支持通过Response 的status(状态码)和statusText(状态文本)属性检查响应状
    态。成功获取响应的请求通常会产生值为200 的状态码,如下所示:
    fetch(‘/bar’)
    .then((response) => {
    console.log(response.status); // 200
    console.log(response.statusText); // OK
    });
    请求不存在的资源通常会产生值为404 的状态码:
    fetch(‘/does-not-exist’)
    .then((response) => {
    console.log(response.status); // 404
    console.log(response.statusText); // Not Found
    });
    请求的URL 如果抛出服务器错误会产生值为500 的状态码:
    fetch(‘/throw-server-error’)
    .then((response) => {
    console.log(response.status); // 500
    console.log(response.statusText); // Internal Server Error
    });
    可以显式地设置fetch()在遇到重定向时的行为(本章后面会介绍),不过默认行为是跟随重定向
    并返回状态码不是300~399 的响应。跟随重定向时,响应对象的redirected 属性会被设置为true,
    而状态码仍然是200:
    fetch(‘/permanent-redirect’)
    .then((response) => {
    // 默认行为是跟随重定向直到最终URL
    // 这个例子会出现至少两轮网络请求
    // /permanent-redirect ->
    console.log(response.status); // 200
    console.log(response.statusText); // OK
    console.log(response.redirected); // true
    });
    在前面这几个例子中,虽然请求可能失败(如状态码为500),但都只执行了期约的解决处理函数。
    事实上,只要服务器返回了响应,fetch()期约都会解决。这个行为是合理的:系统级网络协议已经成
    功完成消息的一次往返传输。至于真正的“成功”请求,则需要在处理响应时再定义。
    通常状态码为200 时就会被认为成功了,其他情况可以被认为未成功。为区分这两种情况,可以在
    状态码非200~299 时检查Response 对象的ok 属性:
    fetch(‘/bar’)
    .then((response) => {
    console.log(response.status); // 200
    console.log(response.ok); // true
    });
    fetch(‘/does-not-exist’)
    .then((response) => {
    console.log(response.status); // 404
    console.log(response.ok); // false
    });
    因为服务器没有响应而导致浏览器超时,这样真正的fetch()失败会导致期约被拒绝:
    fetch(‘/hangs-forever’)
    .then((response) => {
    console.log(response);
    }, (err) => {
    console.log(err);
    });
    //(浏览器超时后)
    // TypeError: “NetworkError when attempting to fetch resource.”
    违反CORS、无网络连接、HTTPS 错配及其他浏览器/网络策略问题都会导致期约被拒绝。
    可以通过url 属性检查通过fetch()发送请求时使用的完整URL:
    // foo.com/bar/baz 发送的请求
    console.log(window.location.href); // https://foo.com/bar/baz
    fetch(‘qux’).then((response) => console.log(response.url));
    // https://foo.com/bar/qux
    fetch(‘/qux’).then((response) => console.log(response.url));
    // https://foo.com/qux
    fetch(‘//qux.com’).then((response) => console.log(response.url));
    // https://qux.com
    fetch(‘https://qux.com’).then((response) => console.log(response.url));
    // https://qux.com

标签:console,log,请求,javascript,fetch,API,bar,response,白到
From: https://blog.csdn.net/wanmeijuhao/article/details/141802988

相关文章

  • LinkAI工作流发布至广场,并通过api调用自己或者他人的工作流
    什么是工作流LinkAI工作流(WorkFlow)是一种灵活的智能体搭建方式。可以自由选择「大模型、应用、知识库、插件、意图识别、转人工、渠道消息发送」等多种原子能力,通过可视化拖拉拽的方式进行组合编排,零代码搭出一个业务流程。让智能体按照规划的方式进行工作。并且可以设置定时运行......
  • Java API:MATH
    JavaAPI:MATH目录JavaAPI:MATH1MATH2示例1MATHMath包含执行基本数字运算的方法;Math类提供的所有方法都是类方法;Math类方法变量和类型方法描述staticintabs(inta)返回int值的绝对值。staticdoubleceil(doublea)返回大于或等于参数且等于数学......
  • Java API:System
    JavaAPI:System目录JavaAPI:System1System2示例代码1SystemSystem类包含几个有用的类字段和方法。它无法实例化。System类提供的设施包括标准输入,标准输出和错误输出流;访问外部定义的属性和环境变量;加载文件和库的方法;以及用于快速复制阵列的一部分的实用方法。......
  • Java API:Object and Objects
    JavaAPI:ObjectandObjects目录JavaAPI:ObjectandObjects1Object1.1常用方法1.1Object类的toString方法1.1.1示例1.2equals1.2.1示例1.2.2面试题2Objects2.1示例1Object类Object是类层次结构的根。每个class都有Object作为超类。所有对象(包括数组)都实现此类的方......
  • Java API:BigDecimal
    JavaAPI:BigDecimal目录JavaAPI:BigDecimal1BigDecimal2示例1BigDecimalBigDecimal类使用户完全控制舍入行为。如果未指定舍入模式,并且无法表示确切的结果,则抛出异常;否则,可以通过向操作提供适当的MathContext对象来进行计算,以选择精度和舍入模式。在这两种情况下,都......
  • 浙江省会计人员继续教育刷课脚本-JavaScript编写
    脚本学习网站:浙江省会计人员继续教育:https://jxjy.czt.zj.gov.cn/front/jxjy.html脚本地址:浙江省会计人员继续教育-刷课脚本:https://greasyfork.org/zh-CN/scripts/506412-浙江省会计人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器为例)打开最中间那个蓝色......
  • 浙江省住房和城乡建设行业继续教育刷课脚本-JavaScript编写
    脚本学习网站:https://zj.zjjsrc.cn/web/web_toUserSignUp.page脚本地址:浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本:https://greasyfork.org/zh-CN/scripts/506406-浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器......
  • 浙江省建设人才远程继续教育平台刷课脚本-JavaScript编写
    脚本学习网站:https://zj.zjjsrc.cn/web/web_toUserSignUp.page脚本地址:浙江省建设人才远程继续教育平台刷课脚本:https://greasyfork.org/zh-CN/scripts/506406-浙江省住房和城乡建设行业专业技术人员继续教育-刷课脚本教程1.插件安装(以MicrosoftEdge浏览器为例)打开最中间......
  • 开源优雅的API交互工具 HTTPie CLI
    #HTTPie CLI:现代、用户友好的命令行HTTP客户端 - 精选真开源,释放新价值。概览HTTPie CLI 是一款专为API时代设计的命令行HTTP客户端,以其简洁明了的语法和丰富的功能集,为开发者和系统管理员提供了一种高效与HTTP服务交互的方式。它支持JSON格式的自动解析和生成,使得与RESTfu......
  • 线性表之队列API设计思路
    Java学习手册+面试指南:https://javaxiaobear.cn队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先读被读出来。1、队列的API设计类名Queue构造方法Queue():创建Queue对象成......