fetch
使用 Fetch
Fetch API 提供了一个 JavaScript 接口,用于访问和操纵 HTTP 管道的一些具体部分,例如请求和响应。它还提供了一个全局 fetch()
方法,该方法提供了一种简单,合理的方式来跨网络异步获取资源。
这种功能以前是使用 XMLHttpRequest
实现的。Fetch 提供了一个更理想的替代方案,可以很容易地被其他技术使用,例如 Service Workers
(en-US)。Fetch 还提供了专门的逻辑空间来定义其他与 HTTP 相关的概念,例如 CORS 和 HTTP 的扩展。
请注意,fetch
规范与 jQuery.ajax()
主要有三种方式的不同:
- 当接收到一个代表错误的 HTTP 状态码时,从
fetch()
返回的 Promise 不会被标记为 reject, 即使响应的 HTTP 状态码是 404 或 500。相反,它会将 Promise 状态标记为 resolve (但是会将 resolve 的返回值的ok
属性设置为 false ),仅当网络故障时或请求被阻止时,才会标记为 reject。 fetch()
可以不会接受跨域 cookies;你也可以不能使用fetch()
建立起跨域会话。fetch
不会发送 cookies。除非你使用了credentials 的初始化选项。(自 2017 年 8 月 25 日以后,默认的 credentials 政策变更为same-origin
。Firefox 也在 61.0b13 版本中进行了修改)
Response 对象
如上所述,Response
实例是在 fetch()
处理完 promise 之后返回的。
你会用到的最常见的 response 属性有:
Response.status
— 整数(默认值为200)为response的状态码。Response.statusText
— 字符串(默认值为"OK"),该值与 HTTP 状态码消息对应。Response.ok
— 如上所示,该属性是来检查response的状态是否在 200 - 299(包括200 和 299)这个范围内。该属性返回一个布尔值
(en-US)。
它的实例也可用通过 JavaScript 来创建,但只有在 ServiceWorkers
(en-US) 中才真正有用,当使用 respondWith()
方法并提供了一个自定义的 response 来接受 request 时: