詳解JS中常用的Fetch API
Fetch API 是一種用于進行網(wǎng)絡(luò)請求的現(xiàn)代 JavaScript API,相對于傳統(tǒng)的 XMLHttpRequest,F(xiàn)etch API 更符合 Promise 和 async/await 的編程模型。
下面是一個使用 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) { // 處理錯誤 console.log('發(fā)生錯誤:' + error.message); });
上述代碼使用 Fetch API 發(fā)起了一個 GET 請求,并在 Promise 的鏈式調(diào)用中處理響應(yīng)。如果響應(yīng)狀態(tài)碼為 200(response.ok
為真),則解析響應(yīng)的 JSON 數(shù)據(jù);否則,拋出一個錯誤。最后,通過 .then
處理解析后的數(shù)據(jù),或通過 .catch
處理捕獲到的錯誤。
在使用 Fetch API 進行異步請求時,.then()
方法用于處理 Promise 對象的成功狀態(tài)。Fetch API 返回的 Promise 對象在請求成功時會觸發(fā)第一個 .then()
方法,并將響應(yīng)對象作為參數(shù)傳遞給該方法。
在示例中的第一個 .then()
中,我們檢查響應(yīng)對象的 ok
屬性來判斷請求是否成功(狀態(tài)碼為 200)。如果成功,我們使用 .json()
方法解析響應(yīng)的 JSON 數(shù)據(jù),并返回一個新的 Promise 對象,以便將解析后的數(shù)據(jù)傳遞給下一個 .then()
。
第二個 .then()
方法用于處理解析后的數(shù)據(jù),它接收解析后的數(shù)據(jù)作為參數(shù),并執(zhí)行相應(yīng)的操作。在示例中,我們使用 console.log()
打印解析后的數(shù)據(jù)。
請注意,每個 .then()
方法返回的都是一個新的 Promise 對象,這使得我們可以在鏈式調(diào)用中繼續(xù)處理數(shù)據(jù)或進行其他操作。
在鏈式調(diào)用中,如果在任何一個 .then()
方法中拋出錯誤,或者前一個 .then()
返回的 Promise 對象被拒絕(reject),則會觸發(fā) .catch()
方法來處理錯誤情況。.catch()
方法接收錯誤對象作為參數(shù),并執(zhí)行相應(yīng)的錯誤處理邏輯。
因此,.then()
方法用于處理成功狀態(tài)的情況,而 .catch()
方法用于處理錯誤狀態(tài)的情況。通過這種方式,我們可以更好地控制和處理異步操作的結(jié)果。
Fetch API 還支持其他請求方法、請求頭的設(shè)置、發(fā)送數(shù)據(jù)等功能。您可以根據(jù)具體需求進行相應(yīng)的調(diào)整和擴展。
需要注意的是,F(xiàn)etch API 的兼容性較好,但在一些舊版本的瀏覽器中可能不被支持。為了確保兼容性,您可以使用 Polyfill 或?qū)⑵渑c傳統(tǒng)的 XMLHttpRequest 結(jié)合使用。
當使用Fetch API時,您需要使用fetch()
函數(shù)發(fā)起網(wǎng)絡(luò)請求,并使用.then()
和.catch()
方法處理響應(yīng)和錯誤。下面是Fetch API的詳細使用方法:
- 發(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) { // 處理錯誤 console.log('發(fā)生錯誤:' + error.message); });
在fetch()
函數(shù)中傳入URL作為參數(shù),它將返回一個Promise對象。您可以使用.then()
方法處理成功的響應(yīng),如果狀態(tài)碼為200(response.ok
為真),可以使用.json()
方法解析響應(yīng)的JSON數(shù)據(jù)。如果發(fā)生錯誤,可以通過.catch()
方法捕獲并處理錯誤。
- 發(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ā)生錯誤:' + error.message); });
在這個示例中,我們使用fetch()
函數(shù)的第二個參數(shù)來配置請求。我們指定請求的方法為POST,并設(shè)置請求頭為application/json
。我們使用JSON.stringify()
將數(shù)據(jù)轉(zhuǎn)換為JSON字符串,并將其作為請求的主體(body
)。在.then()
中處理響應(yīng),以及在.catch()
中處理錯誤。
- 使用async/await進行請求:
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ā)生錯誤:' + error.message); } } fetchData();
通過使用async/await
,可以將異步請求的處理邏輯更簡潔地表達出來。在fetch()
和response.json()
之前使用await
關(guān)鍵字,可以等待Promise對象解析為結(jié)果。try/catch
塊用于捕獲錯誤并進行處理。
這些示例展示了Fetch API的基本使用方法,您可以根據(jù)需要進行進一步的配置和調(diào)整。請記住,對于跨域請求和處理特定類型的數(shù)據(jù),可能需要額外的配置和處理。
以上就是詳解JS中常用的Fetch API的詳細內(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實現(xiàn)點擊一個按鈕達到瀏覽器全屏效果
點擊一個按鈕要實現(xiàn)按F11全屏的效果。 在HTML5中,W3C制定了關(guān)于全屏的API,就可以實現(xiàn)全屏幕的效果2014-05-05Javascript和Java獲取各種form表單信息的簡單實例
本篇文章主要是對Javascript和Java獲取各種form表單信息的簡單實例進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02json_decode 索引為數(shù)字時自動排序問題解決方法
這篇文章主要介紹了使用son_encode 給前端返回數(shù)據(jù),結(jié)果順序不對,經(jīng)debug調(diào)試,發(fā)現(xiàn)是json_encode 函數(shù)的問題,變成 " " + 數(shù)字即可,需要的朋友可以參考下2020-03-03JavaScript 網(wǎng)頁中實現(xiàn)一個計算當年還剩多少時間的倒數(shù)計時程序
這篇文章主要介紹了JavaScript 網(wǎng)頁中實現(xiàn)一個計算當年還剩多少時間的倒數(shù)計時程序,需要的朋友可以參考下2017-01-01