fetch 的使用

現(xiàn)在應(yīng)該很少有人用原生的JS內(nèi)置XMLHttpRequest對(duì)象寫異步調(diào)用了岂座,仍然用的比較多的應(yīng)該是Jquery的ajax方法撵枢,例如:

$.ajax({
   type: 'get',
   url: location.herf,
   success: function(data){
       console.log(data);
   }
})

最近寫一個(gè)demo用到了fetch API,頓時(shí)覺(jué)得比ajax好用n倍,遂記錄之。

fetch 介紹

fetch API 來(lái)源于 Promise ,可參見(jiàn):Promise;

fetch的API 也可以參見(jiàn):fetch;

fetch()方法調(diào)用兩個(gè)參數(shù):

fetch(input, init)

其中:
input

  • 定義要獲取的資源狸捕。這可能是:一個(gè) USVString 字符串,包含要獲取資源的 URL伊脓。一些瀏覽器會(huì)接受 blob: 和 data:
  • 作為 schemes.一個(gè) Request 對(duì)象府寒。

input直白來(lái)說(shuō)等于ajax中傳入的url;

fetch()另一個(gè)參數(shù) init可以配置其他請(qǐng)求相關(guān)參數(shù)报腔,相當(dāng)于ajax里的type株搔,這個(gè)參數(shù)是可選的,包括:

method: 請(qǐng)求使用的方法纯蛾,如 GET纤房、POST.
headers: 請(qǐng)求的頭信息,形式為 Headers 對(duì)象或 ByteString翻诉。
body: 請(qǐng)求的 body 信息炮姨,可能是一個(gè) Blob、BufferSource碰煌、FormData舒岸、URLSearchParams 或者 USVString 對(duì)象。(如果是 GET 或 HEAD 方法芦圾,則不能包含 body 信息)
mode: 請(qǐng)求的模式蛾派,如 cors、 no-cors 或者 same-origin个少。
credentials: 請(qǐng)求的 credentials洪乍,如 omit、same-origin 或者 include夜焦。
cache: 請(qǐng)求的 cache 模式: default, no-store, reload, no-cache, force-cache, or only-if-cached壳澳。

fetch()的success callback 是用 .then()完成的,實(shí)際上按照我的理解茫经,fetch()就是一個(gè)Promise對(duì)象的實(shí)例巷波,Promise對(duì)象實(shí)例如下:

new Promise(
    /* executor */
    function(resolve, reject) {...}
);
var promise = new Promise(function(resolve, reject) {
  if (/* 異步操作成功 */){
    resolve(value);
  } else {
    reject(error);
  }
});

promise.then(function(value) {
  // success
}, function(value) {
  // failure
});

所以fetch()中,通過(guò).then()調(diào)用異步成功函數(shù)resolve卸伞,通過(guò).catch()調(diào)用異步失敗函數(shù)reject褥紫;
拼裝在一起,就有:

fetch(location.herf, {
    method: "get"
}).then(function(response) {
    return response.text()
}).then(function(data) {
    console.log(data)
}).catch(function(e) {
  console.log("Oops, error");
});

這其中瞪慧,第一步.then()將異步數(shù)據(jù)處理為text,如果需要json數(shù)據(jù)部念,只需要 :

function(response) {return response.json()}

用es6箭頭函數(shù)寫弃酌,就是:

fetch(url).then(res => res.json())
  .then(data => console.log(data))
  .catch(e => console.log("Oops, error", e));

fetch 兼容性

所有的ie都不支持fetch()方法,所以氨菇,考慮兼容性,需要對(duì)fetch()使用polyfill妓湘;
使用Fetch Polyfil來(lái)實(shí)現(xiàn) fetch 功能:

npm install whatwg-fetch --save

對(duì)于ie查蓉,還要引入Promise

npm install promise-polyfill --save-exact

考慮到跨域問(wèn)題,需要使用Jsonp榜贴,那么還需要fetch-jsonp:

npm install fetch-jsonp

至此豌研,則有:

import 'whatwg-fetch';
import Promise from 'promise-polyfill';
import fetchJsonp from 'fetch-jsonp';

fetchJsonp('/users.jsonp')
  .then(function(response) {
    return response.json()
  }).then(function(json) {
    console.log('parsed json', json)
  }).catch(function(ex) {
    console.log('parsing failed', ex)
  })

Ref:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末唬党,一起剝皮案震驚了整個(gè)濱河市鹃共,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驶拱,老刑警劉巖霜浴,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蓝纲,居然都是意外死亡阴孟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門税迷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)永丝,“玉大人,你說(shuō)我怎么就攤上這事箭养∧饺拢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵露懒,是天一觀的道長(zhǎng)闯冷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)懈词,這世上最難降的妖魔是什么蛇耀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮坎弯,結(jié)果婚禮上纺涤,老公的妹妹穿的比我還像新娘。我一直安慰自己抠忘,他們只是感情好撩炊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著崎脉,像睡著了一般拧咳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上囚灼,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天骆膝,我揣著相機(jī)與錄音祭衩,去河邊找鬼。 笑死阅签,一個(gè)胖子當(dāng)著我的面吹牛掐暮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播政钟,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼路克,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了养交?” 一聲冷哼從身側(cè)響起精算,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎层坠,沒(méi)想到半個(gè)月后殖妇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡破花,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年谦趣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片座每。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡前鹅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出峭梳,到底是詐尸還是另有隱情舰绘,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布葱椭,位于F島的核電站捂寿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏孵运。R本人自食惡果不足惜秦陋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望治笨。 院中可真熱鬧驳概,春花似錦、人聲如沸旷赖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)等孵。三九已至稚照,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锐锣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工腌闯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雕憔。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像糖声,于是被迫代替她去往敵國(guó)和親斤彼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • fetch是js提供進(jìn)行網(wǎng)絡(luò)請(qǐng)求的框架蘸泻。 調(diào)用結(jié)構(gòu)是這樣的琉苇。 fetch( url , options ).the...
    lzh_coder閱讀 485評(píng)論 0 0
  • 五十三:請(qǐng)解釋 JavaScript 中 this 是如何工作的。1.方法調(diào)用模式當(dāng)一個(gè)函數(shù)被保存為一個(gè)對(duì)象的屬性...
    Arno_z閱讀 577評(píng)論 0 2
  • fetch已經(jīng)被大部分的瀏覽器兼容了悦施,包括chrome并扇,F(xiàn)irefox,safari抡诞,opera穷蛹,edge,但是I...
    風(fēng)吹過(guò)的空氣閱讀 892評(píng)論 0 0
  • 本文詳細(xì)介紹了 XMLHttpRequest 相關(guān)知識(shí)昼汗,涉及內(nèi)容: AJAX肴熏、XMLHTTP、XMLHttpReq...
    semlinker閱讀 13,657評(píng)論 2 18
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理顷窒,服務(wù)發(fā)現(xiàn)蛙吏,斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139