摘要:四請(qǐng)求常見數(shù)據(jù)格式接下來將介紹如何使用請(qǐng)求本地文本數(shù)據(jù),請(qǐng)求本地?cái)?shù)據(jù)以及請(qǐng)求網(wǎng)絡(luò)接口。請(qǐng)求網(wǎng)絡(luò)接口獲取中的數(shù)據(jù),做法與獲取本地的方法類似得到數(shù)據(jù)后,同樣要經(jīng)過處理
一 序言
在 傳統(tǒng)Ajax 時(shí)代,進(jìn)行 API 等網(wǎng)絡(luò)請(qǐng)求都是通過XMLHttpRequest或者封裝后的框架進(jìn)行網(wǎng)絡(luò)請(qǐng)求,然而配置和調(diào)用方式非常混亂,對(duì)于剛?cè)腴T的新手并不友好。今天我們介紹的Fetch提供了一個(gè)更好的替代方法,它不僅提供了一種簡(jiǎn)單,合乎邏輯的方式來跨網(wǎng)絡(luò)異步獲取資源,而且可以很容易地被其他技術(shù)使用,例如 Service Workers。
本文首發(fā)地址為GitHub博客,寫文章不易,請(qǐng)多多支持與關(guān)注!
使用Ajax請(qǐng)求一個(gè) JSON 數(shù)據(jù)一般是這樣:
var xhr = new XMLHttpRequest(); xhr.open("GET", url/file,true); xhr.onreadystatechange = function() { if(xhr.readyState==4){ if(xhr.status==200){ var data=xhr.responseText; console.log(data); } }; xhr.onerror = function() { console.log("Oh, error"); }; xhr.send();
同樣我們使用fetch請(qǐng)求JSON數(shù)據(jù):
fetch(url).then(response => response.json())//解析為可讀數(shù)據(jù) .then(data => console.log(data))//執(zhí)行結(jié)果是 resolve就調(diào)用then方法 .catch(err => console.log("Oh, error", err))//執(zhí)行結(jié)果是 reject就調(diào)用catch方法
從兩者對(duì)比來看,fetch代碼精簡(jiǎn)許多,業(yè)務(wù)邏輯更清晰明了,使得代碼易于維護(hù),可讀性更高。
總而言之,F(xiàn)etch 優(yōu)點(diǎn)主要有:
1. 語法簡(jiǎn)潔,更加語義化,業(yè)務(wù)邏輯更清晰
2. 基于標(biāo)準(zhǔn) Promise 實(shí)現(xiàn),支持 async/await
3. 同構(gòu)方便,使用isomorphic-fetch
三 Promise簡(jiǎn)介由于 Fetch API 是基于 Promise 設(shè)計(jì),接下來我們簡(jiǎn)單介紹下Promise工作流程,方便大家更好理解Fetch。
fetch方法返回一個(gè)Promise對(duì)象, 根據(jù) Promise Api 的特性, fetch可以方便地使用then方法將各個(gè)處理邏輯串起來, 使用 Promise.resolve() 或 Promise.reject() 方法將分別返會(huì)肯定結(jié)果的Promise或否定結(jié)果的Promise, 從而調(diào)用下一個(gè)then 或者 catch。一旦then中的語句出現(xiàn)錯(cuò)誤, 也將跳到catch中。
四 請(qǐng)求常見數(shù)據(jù)格式接下來將介紹如何使用fetch請(qǐng)求本地文本數(shù)據(jù),請(qǐng)求本地JSON數(shù)據(jù)以及請(qǐng)求網(wǎng)絡(luò)接口。其實(shí)操作相比與Ajax,簡(jiǎn)單很多!
//HTML部分1.fetch請(qǐng)求本地文本數(shù)據(jù)Fetch Api sandbox
本地有一個(gè)test.txt文檔,通過以下代碼就可以獲取其中的數(shù)據(jù),并且顯示在頁面上。
document.getElementById("button1").addEventListener("click",getText); function getText(){ fetch("test.txt") .then((res) => res.text())//注意:此處是res.text() .then(data => { console.log(data); document.getElementById("output").innerHTML = data; }) .catch(err => console.log(err)); }2.fetch請(qǐng)求本地JSON數(shù)據(jù)
本地有個(gè)posts.json數(shù)據(jù),與請(qǐng)求本地文本不同的是,得到數(shù)據(jù)后還要用forEach遍歷,最后呈現(xiàn)在頁面上。
document.getElementById("button2").addEventListener("click",getJson); function getJson(){ fetch("posts.json") .then((res) => res.json()) .then(data => { console.log(data); let output = ""; data.forEach((post) => { output += `
獲取https://api.github.com/users中的數(shù)據(jù),做法與獲取本地JSON的方法類似,得到數(shù)據(jù)后,同樣要經(jīng)過處理
document.getElementById("button3").addEventListener("click",getExternal); function getExternal(){ // https://api.github.com/users fetch("https://api.github.com/users") .then((res) => res.json()) .then(data => { console.log(data); let output = ""; data.forEach((user) => { output += `
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/100222.html
摘要:四請(qǐng)求常見數(shù)據(jù)格式接下來將介紹如何使用請(qǐng)求本地文本數(shù)據(jù),請(qǐng)求本地?cái)?shù)據(jù)以及請(qǐng)求網(wǎng)絡(luò)接口。請(qǐng)求網(wǎng)絡(luò)接口獲取中的數(shù)據(jù),做法與獲取本地的方法類似得到數(shù)據(jù)后,同樣要經(jīng)過處理 一 序言 在 傳統(tǒng)Ajax 時(shí)代,進(jìn)行 API 等網(wǎng)絡(luò)請(qǐng)求都是通過XMLHttpRequest或者封裝后的框架進(jìn)行網(wǎng)絡(luò)請(qǐng)求,然而配置和調(diào)用方式非常混亂,對(duì)于剛?cè)腴T的新手并不友好。今天我們介紹的Fetch提供了一個(gè)更好的替代方...
摘要:四請(qǐng)求常見數(shù)據(jù)格式接下來將介紹如何使用請(qǐng)求本地文本數(shù)據(jù),請(qǐng)求本地?cái)?shù)據(jù)以及請(qǐng)求網(wǎng)絡(luò)接口。請(qǐng)求網(wǎng)絡(luò)接口獲取中的數(shù)據(jù),做法與獲取本地的方法類似得到數(shù)據(jù)后,同樣要經(jīng)過處理 一 序言 在 傳統(tǒng)Ajax 時(shí)代,進(jìn)行 API 等網(wǎng)絡(luò)請(qǐng)求都是通過XMLHttpRequest或者封裝后的框架進(jìn)行網(wǎng)絡(luò)請(qǐng)求,然而配置和調(diào)用方式非常混亂,對(duì)于剛?cè)腴T的新手并不友好。今天我們介紹的Fetch提供了一個(gè)更好的替代方...
摘要:例子張三刪除用戶為了刪除用戶,我們首先需要定位用戶,然后我們定義方法類型。例子張三結(jié)論現(xiàn)在,你已基本了解如何使用的從服務(wù)器檢索或操作資源,以及如何處理。您可以使用本文作為如何構(gòu)建操作的請(qǐng)求的指南。 showImg(https://segmentfault.com/img/bVbjxqh?w=1000&h=562); 本次將介紹如何使用Fetch API(ES6 +)對(duì)REST API的...
摘要:請(qǐng)求默認(rèn)會(huì)攜帶同源請(qǐng)求的,而跨域請(qǐng)求則不會(huì)攜帶,設(shè)置的的屬性為將允許攜帶跨域。類型請(qǐng)求成功后的回調(diào)函數(shù)。另外,同樣提供了在環(huán)境下的支持,可謂是網(wǎng)絡(luò)請(qǐng)求的首選方案。當(dāng)網(wǎng)絡(luò)故障時(shí)或請(qǐng)求被阻止時(shí),才會(huì)標(biāo)記為,如跨域不存在,網(wǎng)絡(luò)異常等會(huì)觸發(fā)。 一、前端進(jìn)行網(wǎng)絡(luò)請(qǐng)求的關(guān)注點(diǎn) 大多數(shù)情況下,在前端發(fā)起一個(gè)網(wǎng)絡(luò)請(qǐng)求我們只需關(guān)注下面幾點(diǎn): 傳入基本參數(shù)(url,請(qǐng)求方式) 請(qǐng)求參數(shù)、請(qǐng)求參數(shù)類型 設(shè)...
摘要:是在收到響應(yīng)后執(zhí)行的函數(shù),可以不用返回。一步步介紹了如何構(gòu)建以及使用中間層,來統(tǒng)一管理接口地址,最后還介紹了下中間件等高級(jí)功能。 零、問題的由來 開門見山地說,這篇文章是一篇安利軟文~,安利的對(duì)象就是最近搞的 tua-api。 顧名思義,這就是一款輔助獲取接口數(shù)據(jù)的工具。 發(fā)請(qǐng)求相關(guān)的工具辣么多,那我為啥要用你呢? 理想狀態(tài)下,項(xiàng)目中應(yīng)該有一個(gè) api 中間層。各種接口在這里定義,業(yè)務(wù)...
閱讀 2879·2021-11-16 11:55
閱讀 2629·2021-09-29 09:34
閱讀 3448·2021-09-01 14:21
閱讀 3783·2019-08-29 12:36
閱讀 708·2019-08-26 10:55
閱讀 4002·2019-08-26 10:20
閱讀 1039·2019-08-23 18:19
閱讀 1206·2019-08-23 17:56