成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ES6 Fetch API HTTP請求實用指南

Sunxb / 829人閱讀

摘要:例子張三刪除用戶為了刪除用戶,我們首先需要定位用戶,然后我們定義方法類型。例子張三結(jié)論現(xiàn)在,你已基本了解如何使用的從服務(wù)器檢索或操作資源,以及如何處理。您可以使用本文作為如何構(gòu)建操作的請求的指南。

本次將介紹如何使用Fetch API(ES6 +)對REST API的 HTTP請求,還有一些示例提供給大家便于大家理解。

注意:所有示例均在帶有箭頭功能的 ES6中給出。

當(dāng)前的Web /移動應(yīng)用程序中的一種常見模式是從服務(wù)器請求或顯示某種數(shù)據(jù)(例如用戶,帖子,評論,訂閱,付款等),然后使用CRUD(創(chuàng)建-Create,閱讀-Retrieve,更新-Update或刪除-Delete)操作。

為了進(jìn)一步操作資源,我們經(jīng)常使用這些JS方法(推薦),例如 .map(), .filter()和 .reduce()。

一下就是我們要解決的問題:
處理JS的異步HTTP請求
什么是AJAX?
為什么要獲取API?
快速介紹Fetch API
獲取API - CRUD示例←好東西!

1.處理JS的異步HTTP請求

JavaScript(JS)的工作原理是最具有挑戰(zhàn)性的部分之一是理解如何處理異步請求,這需要理解promises和回調(diào)是如何工作的。
在大多數(shù)編程語言中,我們都認(rèn)為操作按順序(順序)發(fā)生。必須先執(zhí)行第一行才能繼續(xù)下一行。這個道理顯而易見,因為這是我們自己就是這么操作或者是工作的,當(dāng)然你也可以選擇邊聽歌邊寫代碼(O(∩_∩)O哈哈~);
但是使用JS,我們有多個在后臺/前臺運行的操作,并且我們不能在每次等待用戶事件時都凍結(jié)一個Web應(yīng)用程序。
將JavaScript描述為異步可能會產(chǎn)生一些誤導(dǎo)。更準(zhǔn)確地說,JavaScript是同步的,并且具有各種回調(diào)機(jī)制的單線程。
但是有些事情必須按順序發(fā)生,否則會導(dǎo)致流程混亂和產(chǎn)生意外結(jié)果。出于這個原因,我們可以使用promises和callback來構(gòu)建它。舉例:_在某個操作之前需要驗證用戶憑據(jù)才能進(jìn)行這個操作。_

2.什么是AJAX

AJAX代表異步JavaScript和XML,它允許在應(yīng)用程序運行時通過與Web服務(wù)器交換數(shù)據(jù)來異步更新網(wǎng)頁。簡而言之,它實質(zhì)上意味著您可以更新網(wǎng)頁的各個部分而無需重新加載整個頁面(URL保持不變的情況下)。
*AJAX是一個誤導(dǎo)性的名稱。AJAX應(yīng)用程序可能使用XML來傳輸數(shù)據(jù),但將數(shù)據(jù)作為純文本或JSON文本傳輸同樣很常見。
?- w3shools.com*

AJAX一路走來?
許多開發(fā)人員對在單頁應(yīng)用程序(SPA)中擁有所有特性感到非常興奮,但是這也會導(dǎo)致很多異步痛苦!但幸運的是,我們有像Angular,VueJS和React這樣的庫,所以在寫SPA應(yīng)用的時候會更加簡單和易用。
總的來說,如何平衡重新加載整個頁面或加載部分頁面就顯得非常重要了。
在大多數(shù)情況下,頁面重新加載在瀏覽器日益完善的功能下已經(jīng)表現(xiàn)的非常好了。要是在以前,頁面重新加載需要幾秒鐘(取決于服務(wù)器的位置和瀏覽器功能)。但是今天的瀏覽器非??欤詻Q定是否執(zhí)行AJAX或頁面重新加載的區(qū)別并不大。
個人的經(jīng)驗是,在大多數(shù)情況下,客戶不關(guān)心它是SPA還是額外的頁面重新加載。當(dāng)然,不要誤會我的意思,我確實喜歡SPA,但我們需要考慮一些權(quán)衡,如果我們處理有限的預(yù)算和缺乏資源,那么快速解決方案可能是更好的方法。

最后,它實際上取決于用例,但我個人認(rèn)為SPA需要更多的開發(fā)時間和處理一些頭痛的問題(頁面的首次加載),而不是簡單的頁面重新加載。

3.為什么要 Fetch API?

這允許我們對服務(wù)器執(zhí)行聲明性HTTP請求。對于每個請求,它創(chuàng)建一個Promise必須解決的請求才能定義內(nèi)容類型并訪問數(shù)據(jù)。

現(xiàn)在,F(xiàn)etch API的好處在于它完全受JS生態(tài)系統(tǒng)的支持,并且也是MDN Mozilla文檔的一部分。最后但并非最不重要的是,它在大多數(shù)瀏覽器(IE除外)上開箱即用。從長遠(yuǎn)來看,我猜它將成為調(diào)用Web API的標(biāo)準(zhǔn)方式。

注意!我很清楚其他HTTP方法,例如使用帶有RXJS的Observable,以及它如何關(guān)注訂閱/取消訂閱等方面的內(nèi)存管理/泄漏。也許這將成為執(zhí)行HTTP請求的新標(biāo)準(zhǔn)方式,誰知道呢?
無論如何,在本文中我只關(guān)注Fetch API,但可能在將來寫一篇關(guān)于Observable和RXJS的文章。

4.快速介紹Fetch API

該fetch()方法返回一個Promise解析Response來自Request顯示狀態(tài)(成功與否)的方法。如果您promise {}在控制臺日志屏幕中收到此消息,請不要驚慌 - 它基本上意味著Promise工作,但等待解決。因此,為了解決它,我們需要 .then()處理程序(回調(diào))來訪問內(nèi)容。
所以簡而言之,我們首先定義路徑(Fetch),其次是從服務(wù)器請求數(shù)據(jù)(Request),第三個定義內(nèi)容類型(Body),最后但并非最不重要的是,我們訪問數(shù)據(jù)(Response)。

如果你很難理解這個概念,不要慌。您將通過下面顯示的示例獲得更好的概述。

我們將用于示例的路徑
https://jsonplaceholder.typicode.com/users //返回JSON
5.獲取API - HTTP示例

如果我們想要訪問數(shù)據(jù),我們需要兩個.then()處理程序(回調(diào))。但是如果我們想要操縱資源,我們只需要一個 .then()處理程序。但是,我們可以使用第二個來確保已發(fā)送值。

基本提取API模板

//基于fetch的基本模塊
fetch
.then(response.something) //定義返回的類型和數(shù)據(jù)格式
.then(data) // 返回的數(shù)據(jù)

注意!以上示例僅用于說明目的。如果執(zhí)行它,代碼將不起作用。

獲取API示例
顯示用戶
顯示用戶列表
創(chuàng)建新用戶
刪除用戶
更新用戶

注意!資源不會真正在服務(wù)器上創(chuàng)建,但會返回虛假結(jié)果來模仿真實服務(wù)器。

1.顯示用戶
如前所述,顯示單個用戶的過程包括兩個 .then()處理程序(回調(diào)),第一個用于定義對象,第二個用于訪問數(shù)據(jù)。
請注意,只需閱讀查詢url字符串,/users/2我們就能理解/預(yù)測API的作用。這也是rest api 的重要意義之一

例子

fetch("https://jsonplaceholder.typicode.com/users/2")
    .then(response => response.json()) //定義返回的類型和數(shù)據(jù)格式
    .then(data => console.log(data)) // 返回的數(shù)據(jù)
// 數(shù)據(jù)示例:
// {
//     "id": 2,
//     "name": "Ervin Howell",
//     "username": "Antonette",
//     "email": "[email protected]",
//     "address": {
//       "street": "Victor Plains",
//       "suite": "Suite 879",
//       "city": "Wisokyburgh",
//       "zipcode": "90566-7771",
//       "geo": {
//         "lat": "-43.9509",
//         "lng": "-34.4618"
//       }
//     },
//     "phone": "010-692-6593 x09125",
//     "website": "anastasia.net",
//     "company": {
//       "name": "Deckow-Crist",
//       "catchPhrase": "Proactive didactic contingency",
//       "bs": "synergize scalable supply-chains"
//     }
// }

2.顯示用戶列表
該示例幾乎與前一個示例相同,只是查詢字符串是/users,而不是/users/2。

例子

fetch("https://jsonplaceholder.typicode.com/users")
    .then(response => response.json()) //定義返回的類型和數(shù)據(jù)格式
    .then(data => console.log(data)) // 返回的數(shù)據(jù)
// 數(shù)據(jù)示例:
// [
//     {
//       "id": 1,
//       "name": "Leanne Graham",
//       "username": "Bret",
//       "email": "[email protected]",
//       "address": {
//         "street": "Kulas Light",
//         "suite": "Apt. 556",
//         "city": "Gwenborough",
//         "zipcode": "92998-3874",
//         "geo": {
//           "lat": "-37.3159",
//           "lng": "81.1496"
//         }
//       },
//       "phone": "1-770-736-8031 x56442",
//       "website": "hildegard.org",
//       "company": {
//         "name": "Romaguera-Crona",
//         "catchPhrase": "Multi-layered client-server neural-net",
//         "bs": "harness real-time e-markets"
//       }
//     }
// 更多...
// ]

3.創(chuàng)建新用戶
這個看起來與前面的例子有點不同。如果熟悉HTTP協(xié)議,它給我們提供了很多的方法,如POST,GET,DELETE,UPDATE,PATCH和PUT。這些方法是簡單描述要執(zhí)行的操作類型的動詞,主要用于操作服務(wù)器上的資源/數(shù)據(jù)。

無論如何,為了使用Fetch API創(chuàng)建新用戶,我們需要使用HTTP謂詞POST。但首先,我們需要在某處定義它。幸運的是,Init我們可以傳遞一個可選參數(shù),用于定義自定義設(shè)置的URL,例如方法類型,正文,憑據(jù),標(biāo)題等。
例子

fetch("https://jsonplaceholder.typicode.com/users",{
    method: "POST",
      body: JSON.strignify({
        username: "張三",
          email: "[email protected]",
        userId: 1
    }),
      headers: { "Content-Type": "application/json;charset=utf-8"}
})

4.刪除用戶
為了刪除用戶,我們首先需要定位用戶/users/1,然后我們定義方法類型DELETE。
例子

fetch("https://jsonplaceholder.typicode.com/users/1",{
    methods: "DELETE"
})

5.更新用戶
HTTP謂詞PUT用于操作目標(biāo)資源,如果要進(jìn)行部分更改,則需要使用PATCH。
例子

fetch("https://jsonplaceholder.typicode.com/users",{
    method: "PUT",
      body: JSON.strignify({
        username: "張三",
          email: "[email protected]",
        userId: 1
    }),
      headers: { "Content-Type": "application/json;charset=utf-8"}
})
結(jié)論

現(xiàn)在,你已基本了解如何使用JavaScript的Fetch API從服務(wù)器檢索或操作資源,以及如何處理promise。您可以使用本文作為如何構(gòu)建CRUD操作的API請求的指南。
就個人而言,我覺得Fetch API是聲明性的,就算沒有任何技術(shù)編碼經(jīng)驗,你也可以很容易地理解發(fā)生了什么。

如果有啥問題在評論處分享你的想法。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99281.html

相關(guān)文章

  • React 學(xué)習(xí)指南及前端干貨

    摘要:回調(diào)方法中使用獲取文件名給回調(diào)方法自定義傳參數(shù)的利用進(jìn)行復(fù)制它能兼容的及以下版本,兼容所有的瀏覽器,進(jìn)行頁面內(nèi)容的復(fù)制與集成配置這個后臺模版不錯,有多個框架版本的檢測終端類型漏洞說明文件上傳 7分鐘入門react的視頻https://egghead.io/lessons/re... 這個react的項目不錯,跟著走一遍 你會清楚很多http://www.kancloud.cn/kan...

    Scott 評論0 收藏0
  • 前端練級攻略(第二部分)

    摘要:是文檔的一種表示結(jié)構(gòu)。這些任務(wù)大部分都是基于它。這個實踐的重點是把你在前端練級攻略第部分中學(xué)到的一些東西和結(jié)合起來。一旦你進(jìn)入框架部分,你將更好地理解并使用它們。到目前為止,你一直在使用進(jìn)行操作。它是在前端系統(tǒng)像今天這樣復(fù)雜之前編寫的。 本文是 前端練級攻略 第二部分,第一部分請看下面: 前端練級攻略(第一部分) 在第二部分,我們將重點學(xué)習(xí) JavaScript 作為一種獨立的語言,如...

    BWrong 評論0 收藏0
  • 分別使用 XHR、jQuery 和 Fetch 實現(xiàn) AJAX

    摘要:本文詳細(xì)講述如何使用原生和來實現(xiàn)。使用可以無刷新地向服務(wù)端發(fā)送請求接收服務(wù)端響應(yīng),并更新頁面。分別要用到的方法和方法。,,都是現(xiàn)在和未來解決異步的標(biāo)準(zhǔn)做法,可以完美搭配使用。這也是使用標(biāo)準(zhǔn)一大好處。 本文詳細(xì)講述如何使用原生 JS、jQuery 和 Fetch 來實現(xiàn) AJAX。 AJAX 即 Asynchronous JavaScript and XML,異步的 JavaScript...

    Julylovin 評論0 收藏0
  • 第三方庫

    摘要:微信支付,支付寶支付,銀聯(lián)支付三大支付總結(jié)支付寶植入總結(jié)支付寶的植基于和百度地圖的組件庫基于百度地圖封裝的組件庫,使用這個庫最好需要先了解和百度地圖。 Commento - 多說 & Disqus 開源替代品 Commento - 多說 & Disqus 開源替代品 anime.js 簡單入門教程 強大輕量的動畫庫 anime.js 入門教程 來自B站的開源的MagicaSakura源...

    seanHai 評論0 收藏0
  • 第三方庫

    摘要:微信支付,支付寶支付,銀聯(lián)支付三大支付總結(jié)支付寶植入總結(jié)支付寶的植基于和百度地圖的組件庫基于百度地圖封裝的組件庫,使用這個庫最好需要先了解和百度地圖。 Commento - 多說 & Disqus 開源替代品 Commento - 多說 & Disqus 開源替代品 anime.js 簡單入門教程 強大輕量的動畫庫 anime.js 入門教程 來自B站的開源的MagicaSakura源...

    gityuan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<