只知道ajax?你已經out了

来源:https://www.cnblogs.com/qcloud1001/archive/2018/11/20/9990285.html
-Advertisement-
Play Games

歡迎大家前往 "騰訊雲+社區" ,獲取更多騰訊海量技術實踐乾貨哦~ 本文由 "前端林子" 發表於 "雲+社區專欄" 隨著前端技術的發展,請求伺服器數據的方法早已不局限於ajax、jQuery的ajax方法。各種js庫已如雨後春筍一般,蓬勃發展,本文主要想介紹其中的axios和fetch。 0.引入 ...


歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~

本文由前端林子發表於雲+社區專欄

隨著前端技術的發展,請求伺服器數據的方法早已不局限於ajax、jQuery的ajax方法。各種js庫已如雨後春筍一般,蓬勃發展,本文主要想介紹其中的axios和fetch。

0.引入

ajax(Asynchronous JavaScript and XML--非同步JavaScript 和 XML),是一種客戶端向伺服器請求數據的方式,並且不需要去刷新整個頁面;它依賴的是XMLHttpRequest對象。在我之前的文章中,介紹過ajax的創建過程,可以移步這次,我們聊聊ajax的創建過程

當然項目中我們一般沒有直接使用原生的ajax,而是使用javascript的各種庫,例如jQuery。jQuery對原生的XHR對象進行了封裝,還增添了對JSONP的支持,且經過多年維護,各種文檔資料非常豐富,非常適合學習和上手。不過隨著前端技術的快速發展,react、vue框架的興起,XHR對象都有了替代的方案(fetch)。另外如果為了要使用$.ajax方法,就導入整個jQuery這個大而全的庫,也未免顯得臃腫了些。所以本文將介紹兩個目前常用的獲取伺服器數據的js庫:axios和fetch。

1.axios

是一個基於 Promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。

隨著 vuejs 作者尤雨溪發佈消息,不再繼續維護vue-resource,並推薦大家使用 axios 開始,axios 進入了很多人的目光。axios本質也是對原生的XHR的封裝,不過它是Promise 的實現版本,符合最新的ES規範,axios的幾條特性:

(1)從瀏覽器中創建XHR;

(2)從node.js創建http請求;

(3)支持Promise API;

(4)客戶端支持防禦CSRF

(5)提供了一些併發請求的介面

使用npm安裝:

 npm install axios

示例--執行GET請求:

//axios
axios.get('/user', {
    params: {
        ID: 12345
    }
}).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

axios的優點:體積較小、使用簡單、還可以執行多個併發請求,並且可以直接得到返回結果,不會像fetch需要自己去轉換,個人還是比較喜歡使用axios。

2.fetch

fetch API脫離了XHR,是基於Promise設計。舊瀏覽器不支持Promise,需要使用polyfill es6-promise。

2.1 使用

使用npm安裝:

npm install whatwg-fetch --save

示例--執行GET請求:

//use 'whatwg-fetch'
import 'whatwg-fetch'

var result = fetch(url, {
    credentials: 'include',//跨域請求帶上cookie 
    headers: { 'Accept': 'application/json, text/plain, */*' }//設置http請求的頭部信息 
}).then(res => {
    return res.text() //將請求來的數據轉化成 文本形式 
    // return res.json() //將數據轉換成 json格式
}).then(text => {
    console.log(text)
}).catch(e => {
    throw (e)
})

可以在這個代碼的基礎上,增加一些操作,比如說在對請求數據處理前,先檢查下返回結果的狀態。對狀態非200的結果,增加對應狀態碼的錯誤提示;在得到請求數據後,轉換成需要的文本格式,或者json格式;另外,還可以對轉換後的數據進行進一步的處理,比如請求的數據返回的是下劃線類型的數據,可以處理成駝峰形式。

2.2 fetch的優點及需要註意的地方

為什麼要使用fetch呢?直接使用jQuery和axios也能滿足我們的開發需要。看了些文章,提及到使用fetch的好處:

  • 脫離的XHR,是ES規範里新的實現方式,支持async/await;
  • 更加底層,提供了豐富的API(request,response);
  • 符合關註分離,沒有將輸入、輸出和用事件來跟蹤的狀態混雜在一個對象里;
  • 更好更方便的寫法;

需要註意的是:

  • 相容性;
  • 當伺服器返回400、500等錯誤碼時並不會reject,只有網路錯誤等導致請求不能完成時,fetch才會被reject;
  • fetch不支持abort,不支持超時控制,使用setTimeout及Promise.reject的實現的超時控制,並不能阻止請求過程繼續在後臺運行,造成了流量的浪費;
  • fetch沒有辦法原生監測請求的進度,而XHR可以;
  • fetch跨域請求時,預設不會帶cookie,如果需要帶cookie,則要指定:credentials:’include’,例如:
var result = fetch(url, {
    credentials: 'include',
});

3.小結

本文簡單地分別介紹了axios和fetch的使用方法和特點。如果要詳細瞭解fetch的應用,推薦閱讀 MDN Fetch 教程WHATWG Fetch 規範。如有問題,歡迎指正。

相關閱讀
【每日課程推薦】機器學習實戰!快速入門線上廣告業務及CTR相應知識

此文已由作者授權騰訊雲+社區發佈,更多原文請點擊

搜索關註公眾號「雲加社區」,第一時間獲取技術乾貨,關註後回覆1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 總結react中常常被忽略的小知識點 1)即使state里設置成和之前的值一樣,render也會重新渲染 2)父組件傳給子組件的屬性(props是只讀的,在子組件中已在this.state里將屬性賦值給定義的變數),如果屬性在父組件中可以操作改變值的話,那麼在子組件中就不建議修改,如果屬性在父組件不 ...
  • javascript個人筆記 JavaScript的組成 JavaScript是一種運行在客戶端的腳本語言 ​ 1. ECMAScript 標準 js的基本的語法 2. DOM Document Object Model 文檔對象模型 3. BOM Browser Object Model 瀏覽器對 ...
  • 1、假如訪問的介面地址為 http://www.test.com/apis/index.php (php api 介面)2、而開發地址為http://127.0.0.1:8080,當axios發起請求時,出現如下錯誤:Failed to load http://www.test.com/apis/i ...
  • 前端發展很快,現代瀏覽器原生 API 已經足夠好用。我們並不需要為了操作 DOM、Event 等再學習一下 jQuery 的 API。同時由於 React、Angular、Vue 等框架的流行,直接操作 DOM 不再是好的模式,jQuery 使用場景大大減少。本項目總結了大部分 jQuery API ...
  • 什麼是前後端分離? 前後端為什麼要分離? 前後端怎麼樣分離的? 前後端分離給我們前端技術人員的開髮帶來什麼樣的好處? 下麵我就帶著這些問題,來簡單談談我瞭解到的前後端分離情況。 在講前後端分離之前,讓我們先講一講什麼是MVC? MVC誕生於上世紀70年代,是一種經典的設計模式,全名為 Model-V ...
  • 索引 1、對象深拷貝 2、網路圖片轉base64, 線上圖片點擊下載 3、對象深拷貝 4、對象深拷貝 5、對象深拷貝 6、對象深拷貝 1、對象深拷貝 2、網路圖片轉base64, 線上圖片點擊下載 3、對象深拷貝 4、對象深拷貝 5、對象深拷貝 6、對象深拷貝 1、對象的深拷貝(一級屬性拷貝和多級屬 ...
  • 之前做項目的時候,一直都想著做一個上下滾動的公告欄,作為展示網站的最新公告信息,因為剛開始自己的思路並不是太清晰,在網上找了很多的源碼,但是卻發現都不能讓自己滿意,有的還會出現一些小問題,比如,有時候公告上下滾動的時候,兩條公告會重疊在一起。最後我還是決定自己寫一個上下滾動的公告欄。 jQuery實 ...
  • json與object的區別:1、JSON是對象,但對象不一定是JSON2、對象的組成是由屬性和屬性值,也就是KEY->VALUE對組成,value可是是任意的數據類型,當value為一個函數的時候,這個時候叫做方法。而你通過 JSON.parse()傳入的字元串並裡面有VALUE為function ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...