在項目中使用 fetch

在目前的項目開發(fā)中绩衷,要使用到 ajax 時,首先想到的 jquery 的 $.ajax 或者 angular 的 $http喝检,就以 jq 而言纯趋,可能整個項目中憎兽,要用到 jq 的,只有 ajax吵冒,但是卻需要引入整個 jq 庫纯命,這是一個多么絕望的事情,逛開發(fā)者頭條的時候痹栖,偶然看到了這篇文章 傳統(tǒng) Ajax 已死亿汞,F(xiàn)etch 永生,納尼揪阿?ajax 咋就死了疗我,fetch 是什么鬼?

一句話解釋 fetch 與 ajax 的區(qū)別南捂。

Fetch API 使用了 Promises吴裤,它讓接口更簡單、簡潔溺健,避免了回調(diào)的復(fù)雜性麦牺,省去了使用復(fù)雜的 XMLHttpRequest API。

具體 fetch 有什么優(yōu)缺點,大家去 baidu剖膳,google 有很多魏颓,我這里就不說了,這里只講怎么簡單使用吱晒。

為了傳出去的參數(shù)為 form-data琼开,先寫個函數(shù)把參數(shù)對象轉(zhuǎn)換成get參數(shù)的形式

    getParams(obj){
        let resStr = "";
        let resArr = [];
        for(let item in obj){
            let str = item + "=" + obj[item];
            resArr.push(str);
        }
        resStr += resArr.join("&");
        return resStr;
    }
    // 設(shè)入?yún)?{"L": 1, "Z": 2, "Q": 3}
    // 則出參為 L=1&Z=2&Q=3

fetch 部分的代碼

        let getStr = this.getParams(data);
        let request = new Request(URL, {
            method: "POST",
            // credentials: 'include',
            headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
            mode: "cors",
            body: getStr,
        });
        fetch(request)
            .then(
                (res) => {
                    return res.json();
                }
            )
            .then(
                (data) => {
                    console.log(data);
                }
            )
            .catch(
                (err) => {
                    console.log(err);
                }
            )

前端是用 react 寫的,可能有些部分對于不使用 react 的朋友來說看起來有點奇怪枕荞,但是并不影響理解。

解釋一下fetch 的參數(shù)

  • method 就不解釋了
  • 注釋掉的 credentials 是決定是否要帶 cookies
  • headers 的內(nèi)容意思傳的是 form-data
  • mode 是有關(guān)跨域的搞动,cors 的意思是跨域躏精,稍后解釋為什么是跨域的
  • body 里面就是要傳的參

下面的形式就是 promise 的寫法了,還沒研究過的童鞋可以去看一下阮一峰老師的博客

第一個 then 中的 res.json() 為讀取 Response 對象并且將它設(shè)置為已讀(因為Responses對象被設(shè)置為了 stream 的方式鹦肿,所以它們只能被讀取一次) ,并返回一個被解析為 JSON 格式的 promise 對象

fetch 的具體參數(shù)和方法矗烛,可以查看 MDN

后臺使用 node 寫的,這里說明一下前面使用了跨域的原因箩溃,前端使用了 webpack-dev-server 進(jìn)行編譯瞭吃,監(jiān)聽的端口為 8080,而后臺的端口為 1234涣旨,不符合同源協(xié)議歪架,所以使用了跨域。

node 使用了 express 霹陡,接口部分代碼為

router.post('/', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "http://localhost:8080");
    // res.header("Access-Control-Allow-Credentials", true);
    var dataObj = req.body;
    res.json(dataObj);
});
  • 第一行設(shè)置了 header和蚪,允許跨域訪問
  • 第二行注釋掉了,如果 fetch 中允許攜帶 cookies 的話烹棉,則要寫上這一行
  • 前端傳過來的參數(shù)就在 req.body 中
  • 只為了測試攒霹,所以再將參數(shù)返還給前端

以上就是一個簡單的 fetch 的跨域 post 請求,可以自己敲一遍試一下浆洗,雖然目前 fetch 的兼容性不是很好催束,但是使用了 polyfill 以后,可以使兼容性達(dá)到 ie8+伏社。抠刺。。具體的 polyfill 與 async/await 等以后的文章中會有提到摘昌。

:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矫付,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子第焰,更是在濱河造成了極大的恐慌买优,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異杀赢,居然都是意外死亡烘跺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門脂崔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滤淳,“玉大人,你說我怎么就攤上這事砌左〔备溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵汇歹,是天一觀的道長屁擅。 經(jīng)常有香客問我,道長产弹,這世上最難降的妖魔是什么派歌? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮痰哨,結(jié)果婚禮上胶果,老公的妹妹穿的比我還像新娘。我一直安慰自己斤斧,他們只是感情好早抠,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撬讽,像睡著了一般贝或。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锐秦,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天咪奖,我揣著相機與錄音,去河邊找鬼酱床。 笑死羊赵,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扇谣。 我是一名探鬼主播昧捷,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罐寨!你這毒婦竟也來了靡挥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鸯绿,失蹤者是張志新(化名)和其女友劉穎跋破,沒想到半個月后簸淀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡毒返,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年租幕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拧簸。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡劲绪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盆赤,到底是詐尸還是另有隱情贾富,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布牺六,位于F島的核電站颤枪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏兔乞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一凉唐、第九天 我趴在偏房一處隱蔽的房頂上張望庸追。 院中可真熱鬧,春花似錦台囱、人聲如沸淡溯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咱娶。三九已至,卻和暖如春强品,著一層夾襖步出監(jiān)牢的瞬間膘侮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工的榛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留琼了,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓夫晌,卻偏偏與公主長得像雕薪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子晓淀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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

  • 本博客轉(zhuǎn)自:「作者:若愚鏈接:https://zhuanlan.zhihu.com/p/22361337來源:知乎...
    韓寶億閱讀 2,764評論 0 3
  • 本文詳細(xì)介紹了 XMLHttpRequest 相關(guān)知識所袁,涉及內(nèi)容: AJAX、XMLHTTP凶掰、XMLHttpReq...
    semlinker閱讀 13,662評論 2 18
  • 看到標(biāo)題黨說川藏線上 這條最美的景觀大道 如今遍布三種垃圾 紅牛燥爷、避孕套和衛(wèi)生巾 我果然點開一探究竟 紅牛不用解釋...
    文學(xué)山主編山下閱讀 530評論 0 2
  • 這裏是Porto Alegre(點我到維基)從阿嬤家坐火車到這要一小時很珍惜出來的日子呀~註:一巴幣等於十五臺幣蜈亩。...
    os_snow閱讀 383評論 0 1
  • 從沒有這樣玩過,怕自己被玩壞局劲,所以就很晚才敢放出來勺拣,而且截止時間也很早,醒來就停鱼填。目的其實也想讓大家也跑起來药有,所以...
    FeBird閱讀 346評論 0 0