詳解JS中常用的Fetch API
Fetch API 是一種用于進(jìn)行網(wǎng)絡(luò)請求的現(xiàn)代 JavaScript API,相對于傳統(tǒng)的 XMLHttpRequest,F(xiàn)etch API 更符合 Promise 和 async/await 的編程模型。
下面是一個(gè)使用 Fetch API 請求數(shù)據(jù)的示例代碼:
fetch('https://api.example.com/data') .then(function(response) { if (response.ok) { return response.json(); // 解析響應(yīng)的 JSON 數(shù)據(jù) } else { throw new Error('請求失?。? + response.status); } }) .then(function(data) { // 處理解析后的數(shù)據(jù) console.log(data); }) .catch(function(error) { // 處理錯(cuò)誤 console.log('發(fā)生錯(cuò)誤:' + error.message); });
上述代碼使用 Fetch API 發(fā)起了一個(gè) GET 請求,并在 Promise 的鏈?zhǔn)秸{(diào)用中處理響應(yīng)。如果響應(yīng)狀態(tài)碼為 200(response.ok
為真),則解析響應(yīng)的 JSON 數(shù)據(jù);否則,拋出一個(gè)錯(cuò)誤。最后,通過 .then
處理解析后的數(shù)據(jù),或通過 .catch
處理捕獲到的錯(cuò)誤。
在使用 Fetch API 進(jìn)行異步請求時(shí),.then()
方法用于處理 Promise 對象的成功狀態(tài)。Fetch API 返回的 Promise 對象在請求成功時(shí)會觸發(fā)第一個(gè) .then()
方法,并將響應(yīng)對象作為參數(shù)傳遞給該方法。
在示例中的第一個(gè) .then()
中,我們檢查響應(yīng)對象的 ok
屬性來判斷請求是否成功(狀態(tài)碼為 200)。如果成功,我們使用 .json()
方法解析響應(yīng)的 JSON 數(shù)據(jù),并返回一個(gè)新的 Promise 對象,以便將解析后的數(shù)據(jù)傳遞給下一個(gè) .then()
。
第二個(gè) .then()
方法用于處理解析后的數(shù)據(jù),它接收解析后的數(shù)據(jù)作為參數(shù),并執(zhí)行相應(yīng)的操作。在示例中,我們使用 console.log()
打印解析后的數(shù)據(jù)。
請注意,每個(gè) .then()
方法返回的都是一個(gè)新的 Promise 對象,這使得我們可以在鏈?zhǔn)秸{(diào)用中繼續(xù)處理數(shù)據(jù)或進(jìn)行其他操作。
在鏈?zhǔn)秸{(diào)用中,如果在任何一個(gè) .then()
方法中拋出錯(cuò)誤,或者前一個(gè) .then()
返回的 Promise 對象被拒絕(reject),則會觸發(fā) .catch()
方法來處理錯(cuò)誤情況。.catch()
方法接收錯(cuò)誤對象作為參數(shù),并執(zhí)行相應(yīng)的錯(cuò)誤處理邏輯。
因此,.then()
方法用于處理成功狀態(tài)的情況,而 .catch()
方法用于處理錯(cuò)誤狀態(tài)的情況。通過這種方式,我們可以更好地控制和處理異步操作的結(jié)果。
Fetch API 還支持其他請求方法、請求頭的設(shè)置、發(fā)送數(shù)據(jù)等功能。您可以根據(jù)具體需求進(jìn)行相應(yīng)的調(diào)整和擴(kuò)展。
需要注意的是,F(xiàn)etch API 的兼容性較好,但在一些舊版本的瀏覽器中可能不被支持。為了確保兼容性,您可以使用 Polyfill 或?qū)⑵渑c傳統(tǒng)的 XMLHttpRequest 結(jié)合使用。
當(dāng)使用Fetch API時(shí),您需要使用fetch()
函數(shù)發(fā)起網(wǎng)絡(luò)請求,并使用.then()
和.catch()
方法處理響應(yīng)和錯(cuò)誤。下面是Fetch API的詳細(xì)使用方法:
- 發(fā)起GET請求并處理響應(yīng):
fetch('https://api.example.com/data') .then(function(response) { if (response.ok) { return response.json(); // 解析響應(yīng)的JSON數(shù)據(jù) } else { throw new Error('請求失?。? + response.status); } }) .then(function(data) { // 處理解析后的數(shù)據(jù) console.log(data); }) .catch(function(error) { // 處理錯(cuò)誤 console.log('發(fā)生錯(cuò)誤:' + error.message); });
在fetch()
函數(shù)中傳入U(xiǎn)RL作為參數(shù),它將返回一個(gè)Promise對象。您可以使用.then()
方法處理成功的響應(yīng),如果狀態(tài)碼為200(response.ok
為真),可以使用.json()
方法解析響應(yīng)的JSON數(shù)據(jù)。如果發(fā)生錯(cuò)誤,可以通過.catch()
方法捕獲并處理錯(cuò)誤。
- 發(fā)起POST請求并發(fā)送數(shù)據(jù):
var data = { username: 'John', password: 'secret' }; fetch('https://api.example.com/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) .then(function(response) { if (response.ok) { return response.json(); } else { throw new Error('請求失?。? + response.status); } }) .then(function(data) { console.log(data); }) .catch(function(error) { console.log('發(fā)生錯(cuò)誤:' + error.message); });
在這個(gè)示例中,我們使用fetch()
函數(shù)的第二個(gè)參數(shù)來配置請求。我們指定請求的方法為POST,并設(shè)置請求頭為application/json
。我們使用JSON.stringify()
將數(shù)據(jù)轉(zhuǎn)換為JSON字符串,并將其作為請求的主體(body
)。在.then()
中處理響應(yīng),以及在.catch()
中處理錯(cuò)誤。
- 使用async/await進(jìn)行請求:
async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (response.ok) { const data = await response.json(); console.log(data); } else { throw new Error('請求失?。? + response.status); } } catch (error) { console.log('發(fā)生錯(cuò)誤:' + error.message); } } fetchData();
通過使用async/await
,可以將異步請求的處理邏輯更簡潔地表達(dá)出來。在fetch()
和response.json()
之前使用await
關(guān)鍵字,可以等待Promise對象解析為結(jié)果。try/catch
塊用于捕獲錯(cuò)誤并進(jìn)行處理。
這些示例展示了Fetch API的基本使用方法,您可以根據(jù)需要進(jìn)行進(jìn)一步的配置和調(diào)整。請記住,對于跨域請求和處理特定類型的數(shù)據(jù),可能需要額外的配置和處理。
以上就是詳解JS中常用的Fetch API的詳細(xì)內(nèi)容,更多關(guān)于JS Fetch API的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS中獲取函數(shù)調(diào)用鏈所有參數(shù)的方法
這篇文章主要介紹了JS中獲取函數(shù)調(diào)用鏈所有參數(shù)的方法,本文直接給出代碼示例,需要的朋友可以參考下2015-05-05JavaScript控制各種瀏覽器全屏模式的方法、屬性和事件介紹
瀏覽器全屏模式的啟動函數(shù)requestFullscreen仍然需要附帶各瀏覽器的js方言前綴,相信下面這段代碼需要你花大量的搜索才能湊齊:2014-04-04用html5 js實(shí)現(xiàn)點(diǎn)擊一個(gè)按鈕達(dá)到瀏覽器全屏效果
點(diǎn)擊一個(gè)按鈕要實(shí)現(xiàn)按F11全屏的效果。 在HTML5中,W3C制定了關(guān)于全屏的API,就可以實(shí)現(xiàn)全屏幕的效果2014-05-05Javascript和Java獲取各種form表單信息的簡單實(shí)例
本篇文章主要是對Javascript和Java獲取各種form表單信息的簡單實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02json_decode 索引為數(shù)字時(shí)自動排序問題解決方法
這篇文章主要介紹了使用son_encode 給前端返回?cái)?shù)據(jù),結(jié)果順序不對,經(jīng)debug調(diào)試,發(fā)現(xiàn)是json_encode 函數(shù)的問題,變成 " " + 數(shù)字即可,需要的朋友可以參考下2020-03-03JavaScript前端實(shí)現(xiàn)快照的示例代碼
snapshot 翻譯為快照,用于直觀獲取頁面在某個(gè)運(yùn)行時(shí)的狀態(tài),本文主要為大家詳細(xì)介紹 snapshot 工具實(shí)現(xiàn)的原理,以及其在項(xiàng)目中的使用,需要的可以參考下2023-11-11JavaScript 網(wǎng)頁中實(shí)現(xiàn)一個(gè)計(jì)算當(dāng)年還剩多少時(shí)間的倒數(shù)計(jì)時(shí)程序
這篇文章主要介紹了JavaScript 網(wǎng)頁中實(shí)現(xiàn)一個(gè)計(jì)算當(dāng)年還剩多少時(shí)間的倒數(shù)計(jì)時(shí)程序,需要的朋友可以參考下2017-01-01javascript模擬map輸出與去除重復(fù)項(xiàng)的方法
這篇文章主要介紹了javascript模擬map輸出與去除重復(fù)項(xiàng)的方法,通過自定義函數(shù)結(jié)合遍歷與刪除的方法實(shí)現(xiàn)了去除重復(fù)項(xiàng)的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02