使用 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 時: