Fetch簡單封裝

一挪拟、什么是Fetch 歧斟?

1.Fetch本質(zhì)上是一種標準,該標準定義了請求晌畅、響應(yīng)和綁定的流程但指。
2.Fetch標準還定義了Fetch () JavaScript API。
3.可用于前后端抗楔,數(shù)據(jù)交互棋凳。
4.fetch返回的是promise對象,比XMLHttpRequest的實現(xiàn)更簡潔谓谦,fetch 使用起來更簡潔 贫橙,完成工作所需的實際代碼量也更少
5.fetch 可自定義是否攜帶Cookie。
6.fetch不像axios需要安裝使用反粥,fetch可以直接使用卢肃。

二疲迂、如何使用Fetch

Fetch API 提供了一種全局fetch()方法,該方法位于 WorkerOrGlobalScope 這一個 mixin 中 方法用于發(fā)起獲取資源的請求莫湘。它返回一個 promise尤蒿,這個 promise 會在請求響應(yīng)后被 resolve,并傳回 Response 對象幅垮。

fetch(input?: Request | string, init?: RequestInit): Promise<Response>

fetch(url, options).then(function(response) {
  // 處理 HTTP 響應(yīng)
}, function(error) {
  // 處理網(wǎng)絡(luò)錯誤
})

fetch() 參數(shù)

fetch方法可以接收兩個參數(shù)input和options腰池。

  • input 參數(shù)可以是字符串,包含要獲取資源的 URL忙芒。也可以是一個 Request 對象示弓。
  • options 是一個可選參數(shù)。一個配置項對象呵萨,包括所有對請求的設(shè)置奏属。可選的參數(shù)有:
method: 請求使用的方法潮峦,如 GET囱皿、POST、DELETE忱嘹、PUT等嘱腥。
headers: 請求的頭信息,包含與請求關(guān)聯(lián)的Headers對象拘悦。
body: 請求的 body 信息齿兔。注意 GET 或 HEAD 方法的請求不能包含 body 信息
mode: 請求的模式,如 cors础米、 no-cors 或者 same-origin愧驱。
credentials: 請求的 credentials,如 omit椭盏、same-origin 或者 include。為了在當前域名內(nèi)自動發(fā)送 cookie 吻商, 必須提供這個選項掏颊。

三、常用的fetch請求

html

fetch('/index/fetchHtml')
  .then(res => {
    return res.text() // 定義返回格式艾帐。
  }).then(res => {
    document.body.innerHTML += res
  })
  .catch((err) => {
  })

JSON

fetch('請求路徑')
  .then((res) => {
    return res.json()
  })
  .then(res => {
    console.log(res)
  })
  .catch((err => {
  }))

POST JSON

fetch('請求路徑',{
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: '張麻子',
    age: '26',
  })
})
  .then((res) => {
    return res.json()
  })
  .then(res => {
    console.log(res)
  })
  .catch((err => {
  }))

4乌叶、fetch注意事項

1. 錯誤處理

fetch只有在網(wǎng)絡(luò)錯誤的情況,返回的promise會被reject柒爸。成功的 fetch() 檢查不僅要包括 promise 被 resolve准浴,還要包括 Response.ok 屬性為 true。HTTP 404 狀態(tài)并不被認為是網(wǎng)絡(luò)錯誤捎稚,所以Promise的狀態(tài)為resolve乐横。

2. credentials 設(shè)置

fetch可以通過credentials自己控制發(fā)送請求時是否帶上cookie求橄。credentials可設(shè)置為include、same-origin葡公、omit罐农。include為了讓瀏覽器發(fā)送包含憑據(jù)的請求(即使是跨域源)。如果你只想在請求URL與調(diào)用腳本位于同一起源處時發(fā)送憑據(jù)催什,請?zhí)砑觕redentials: 'same-origin'涵亏。要改為確保瀏覽器不在請求中包含憑據(jù),請使用credentials: 'omit'蒲凶。

5.fetch簡單封裝

1.和src同級新建一個api(名字可以隨意起)的文件夾气筋,在文件夾里面新建一個request.js (名字可以隨意起)文件內(nèi)容如下:

export default async(url = '', data = {}, type = 'GET') => {
    const baseUrl = "https://api.it120.cc/small4" // 基礎(chǔ)路徑
    type = type.toUpperCase(); // 請求方式小寫轉(zhuǎn)換成大寫
    url = baseUrl + url; // 請求地址的拼接

    if (type == 'GET') {
        let dataStr = ''; //數(shù)據(jù)拼接字符串
        Object.keys(data).forEach(key => {
            dataStr += key + '=' + data[key] + '&';
        })
        if (dataStr !== '') {
            dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
            url = url + '?' + dataStr;
        }
    }
    let requestConfig = {
        credentials: 'same-origin',
        method: type,
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        mode: "cors", // 用來決定是否允許跨域請求  值有 三個 same-origin,no-cors(默認)以及 cores;
        cache: "force-cache" // 是否緩存請求資源 可選值有 default 旋圆、 no-store 宠默、 reload 、 no-cache 臂聋、 force-cache 或者 only-if-cached 光稼。
    }

    if (type == 'POST') {
        Object.defineProperty(requestConfig, 'body', {
            value: JSON.stringify(data)
        })
    }
    try {
        const response = await fetch(url, requestConfig);
        const responseJson = await response.json();
        return responseJson
    } catch (error) {
        throw new Error(error)
    }
}

6.封裝接口

import api from '../request.js';

下面是簡寫的形式
// getXXX 自定義的接口名字
export const getXXX = (params) => api(`/apigb/v1/component`, params)

export const postXXX = (params) => api.post(`/apigb/v1/component/update-info`, params,'post')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孩等,隨后出現(xiàn)的幾起案子艾君,更是在濱河造成了極大的恐慌,老刑警劉巖肄方,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冰垄,死亡現(xiàn)場離奇詭異,居然都是意外死亡权她,警方通過查閱死者的電腦和手機虹茶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隅要,“玉大人蝴罪,你說我怎么就攤上這事〔角澹” “怎么了要门?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長廓啊。 經(jīng)常有香客問我欢搜,道長,這世上最難降的妖魔是什么谴轮? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任炒瘟,我火速辦了婚禮,結(jié)果婚禮上第步,老公的妹妹穿的比我還像新娘疮装。我一直安慰自己缘琅,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布斩个。 她就那樣靜靜地躺著胯杭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪受啥。 梳的紋絲不亂的頭發(fā)上做个,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音滚局,去河邊找鬼居暖。 笑死,一個胖子當著我的面吹牛藤肢,可吹牛的內(nèi)容都是我干的太闺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼省骂,長吁一口氣:“原來是場噩夢啊……” “哼最住!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涨缚,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤轧粟,失蹤者是張志新(化名)和其女友劉穎兰吟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茂翔,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡混蔼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年昭抒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俐末。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡卓箫,死狀恐怖垄潮,靈堂內(nèi)的尸體忽然破棺而出闷盔,到底是詐尸還是另有隱情逢勾,我是刑警寧澤藐吮,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布谣辞,位于F島的核電站泥从,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纱烘。R本人自食惡果不足惜祈餐,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一昼弟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧变骡,春花似錦芭逝、人聲如沸旬盯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懊缺。三九已至培他,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俊扳,已是汗流浹背馋记。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工抗果, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人日麸。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓代箭,卻偏偏與公主長得像涕刚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子极景,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一们拙、ajax 傳統(tǒng) Ajax 指的是 XMLHttpRequest(XHR),核心使用XMLHttpRequest...
    Sun____閱讀 511評論 0 0
  • 一、什么是Fetch 殊者? Fetch本質(zhì)上是一種標準验夯,該標準定義了請求、響應(yīng)和綁定的流程海蔽。Fetch標準還定義了F...
    HIKALU閱讀 4,371評論 0 0
  • Fetch API 提供了一個 JavaScript接口党窜,用于訪問和操縱HTTP管道的部分借宵,例如請求和響應(yīng)壤玫。它還提...
    wwmin_閱讀 38,046評論 0 59
  • Fetch API XMLHttpRequest的問題 所有的功能全部集中在同一個對象上欲间,容易寫出不易維護的代碼 ...
    percykuang閱讀 331評論 0 0
  • 什么是瀏覽器對象模型 BOM :Browser Object Model(瀏覽器對象模型),瀏覽器模型提供了獨立于...
    世瑋閱讀 505評論 0 1