日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fetch API

發(fā)布時間:2025/3/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fetch API 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Fetch API是一種新規(guī)范,用來取代XMLHttpRequest對象。Fetch API提供了一個fetch()方法,它被定義在BOM的window對象中,你可以用它來發(fā)起對遠程資源的請求。它主要有兩個特點:

接口合理化,Ajax是將所有不同性質(zhì)的接口都放在XHR對象上,而Fetch是將它們分散在幾個不同的對象上; Fetch操作返回Promise對象,避免了嵌套的回調(diào)函數(shù)。

IE不支持,用polyfill解決,基本原理是探測是否存在window.fetch方法,如果沒有則用XHR實現(xiàn)。引入es6-promise.js

一、初識Fetch API
1、檢查瀏覽器是否部署了Fetch API

if ("fetch" in window){console.log('支持'); } else {console.log('不支持'); }

2、看個例子

fetch(url).then(function (response) {return response.json(); }).then(function (jsonData) {console.log(jsonData); }).catch(function () {console.log('出錯了'); });

二、Headers對象
用來構(gòu)造/讀取HTTP數(shù)據(jù)包的頭信息。

var headers = new Headers(); headers.append("Accept", "application/json"); headers.append("Content-Type", "text/plain"); headers.append("Content-Length", content.length.toString()); headers.append("X-Custom-Header", "ProcessThisImmediately");

或者

var headers = new Headers({"Content-Type": "text/plain","Content-Length": content.length.toString(),"X-Custom-Header": "ProcessThisImmediately", }); //對象方法 headers.has("Content-Type") // true headers.has("Set-Cookie") // false headers.set("Content-Type", "text/html") headers.append("X-Custom-Header", "AnotherValue")headers.get("Content-Length") // 11 headers.getAll("X-Custom-Header") // ["ProcessThisImmediately", "AnotherValue"] headers.delete("X-Custom-Header") headers.getAll("X-Custom-Header") // []

三、Request對象
用來構(gòu)造HTTP請求。

var uploadReq = new Request("/uploadImage", {method: "POST",headers: {"Content-Type": "image/png",},body: "image data" });

Request對象實例有兩個屬性是只讀的,不能手動設置。
referrer屬性,表示請求的來源,由瀏覽器設置,有可能是空字符串。
context屬性,表示請求發(fā)出的上下文,如果是image,表示是從img標簽發(fā)出,如果是worker,表示是從worker腳本發(fā)出,如果是fetch,表示是從fetch函數(shù)發(fā)出的。

Request對象實例的mode屬性,用來設置是否跨域,合法的值有以下3種:same-origin、no-cors(默認值)、cors。當設置為same-origin時,只能向同域的URL發(fā)出請求,否則會報錯。

四、Response對象
1、屬性

status:整數(shù)值,表示狀態(tài)碼(比如200);
statusText:字符串,表示狀態(tài)信息,默認是“OK”;
ok:布爾值,表示狀態(tài)碼是否在200-299的范圍內(nèi);
headers:Headers對象,表示HTTP回應的頭信息;
url:字符串,表示HTTP請求的網(wǎng)址;
type:字符串,合法的值有5個basic、cors、default、error、opaque。

basic表示正常的同域請求; cors表示CORS機制的跨域請求; error表示網(wǎng)絡出錯,無法取得信息,status屬性為0,headers屬性為空,并且導致fetch函數(shù)返回Promise對象被拒絕; opaque表示非CORS機制的跨域請求,受到嚴格限制。

2、方法
Response.error()返回一個type屬性為error的Response對象實例。
Response.redirect(url, status)返回的Response對象實例會重定向到另一個URL。

五、Body屬性
Request對象和Response對象都有body屬性,表示請求的內(nèi)容。body屬性可能是以下的數(shù)據(jù)類型:

ArrayBuffer ArrayBufferView (Uint8Array等) Blob/File string URLSearchParams FormData

Request對象和Response對象都提供以下方法,用來讀取body。

arrayBuffer() blob() json() text() formData()

注意,上面這些方法都只能使用一次,第二次使用就會報錯,也就是說,body屬性只能讀取一次。Request對象和Response對象都有bodyUsed屬性,返回一個布爾值,表示body是否被讀取過。
這是因為body屬性是一個stream對象,數(shù)據(jù)只能單向傳送一次。這樣的設計是為了允許JavaScript處理視頻、音頻這樣的大型文件。
六、數(shù)據(jù)流讀取器

.text():返回字符串 .json():返回一個JSON對象 .formData():返回一個FormData對象 .blob():返回一個blob對象 .arrayBuffer():返回一個二進制數(shù)組 數(shù)據(jù)流只能讀取一次,一旦讀取,數(shù)據(jù)流就空了,再次讀取就不會得到結(jié)果。解決方法是在讀取之前,先使用.clone()方法,復制一份一模一樣的副本。

七、fetch()
fetch()第1個參數(shù)可以是url字符串,也可以是Request對象實例。第2個參數(shù)可以傳一個對象,里面指定一些配置項。fetch()返回一個Promise對象,并將response對象傳給回調(diào)函數(shù)。

目前,還有一些XMLHttpRequest對象可以做到,但是Fetch API還沒做到的地方,比如中途中斷HTTP請求,以及獲取HTTP請求的進度,這些不足與Fetch返回的是Promise對象有關(guān)。

轉(zhuǎn)載于:https://www.cnblogs.com/camille666/p/js_fetch_api.html

總結(jié)

以上是生活随笔為你收集整理的Fetch API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。