【vue2.0進階】用axios來實現數據請求,簡單易用

2021-03-02 翻身的碼農

寫了幾期的黑話《網際網路公司黑話大全》,有個同學問vue2.0的進階篇算更新完了嗎?

讓我猛地想起進階篇在推出預告的時候,大家都提醒前端君,vue-resource已經停止更新了,現在都推薦使用了axios了。

嚇得我趕緊打開電腦,趕緊axios學習一番,並很好奇地想看看,這個在vue1.0的時候被官方推薦的 ajax 插件 vue-resource,到底經歷了什麼,被大家遺棄了。

 我們來看看作者給出的解釋,原話如下:

最近團隊討論了一下,Ajax 本身跟 Vue 並沒有什麼需要特別整合的地方,使用 fetchpolyfill 或是 axios、superagent 等等都可以起到同等的效果,vue-resource 提供的價值和其維護成本相比並不划算,所以決定在不久以後取消對 vue-resource 的官方推薦。

已有的用戶可以繼續使用, 但以後不再把 vue-resource 作為官方的 ajax 方案。這裡可以去掉 vue-resource,文檔也不必翻譯了。

前端君為大家總結幾個關鍵點:

    1.  維護成本與其價值相比不划算

    2.  其他插件也能滿足同等開發需求

    3.  你可以繼續用,但不再更新

既然官方都不再更新vue-resource,並推薦大家使用axios,那我們就一起來學習一下它。

 

同樣我們需要事先安裝好它,可以npm和bower安裝,我們這裡用最簡單的cdn加載。

 

 

 <script src="https://unpkg.com/axios/dist/axios.min.js">  </script>

 

 

CDN安裝十分簡單,接下來,我們看看它的語法,如何實現數據請求和提交。

 

寫法如下:

 axios.get('/detail?id=10').then(function (res) {
    //成功獲取數據
   console.log(res);
 }).catch(function (err) {
    //請求錯誤
   console.log(err);
 });

 

使用過jquery的ajax方案的同學,學習axios應該沒有任何難度。get請求也可以通過 params 對象傳遞參數。寫法如下:

 axios.get('/detail', {
    //參數
   params: {
        id: 10
    }
 }).then(function (res) {
    //成功獲取數據
    console.log(res);
 }).catch(function (err) {
    //請求錯誤
    console.log(err);
 });

  

相比第一種寫法,這種寫法的可讀性更高,在接口後增加一個對象參數,其中一個屬性為params,它的值就是我們要傳遞的參數id:10。

 

寫法如下:

 //執行post請求
 axios.post('/add', {
    name: '前端君',
    age: 26
 }).then(function (res) {
    //請求成功
  console.log(res);
 }).catch(function (err) {
    //請求失敗
  console.log(err);
 });

除了最常用的get請求和post請求以外,值得一提的是axios提供了一次性並發多個請求的API,使用方法如下:

 

 function getProfile(){
    //請求1
    return axios.get('/profile');
 }
 function getUser(){
    //請求2
    return axios.get('/user');
 }

 //並發請求
 axios.all([
    getProfile(),
    getUser()
 ]).then(axios.spread((res1, res2)=>{
    //兩個請求現已完成
   console.log(res1);
    console.log(res2);
 }));

 

我們事先定義了兩個方法  getProfile()  和  getUser()  幫我們實現get請求。

在某個業務場景中,我們需要同時產生以上兩個get請求,並需要等待它們都請求完畢後再做邏輯處理,你也許會想到回調嵌套,但現在你可以使用axios的並發請求API: axios.all() 

 

當這兩個請求都完成的時候會觸發 axios.spread() 函數,res1和res2兩個參數分別代表返回的結果,相當實用的API。

 

其實上面我們剛剛講到的 axios.get()  和  axios.post() 寫法是axios給我們提供網絡請求的一種別名方式,如果你不喜歡這種寫法,完成可以自己通過配置請求參數,實現你想要的請求效果。

舉個慄子,對比一下。

 

手動配置參數,實現一個post請求:

 // 發送一個 POST 請求
 axios({
    method: 'post',
    url: '/user',
    data: {
        name: '前端君',
    }
 });

 

使用post別名寫法,實現一個post請求:

 //發送一個 POST 請求
 axios.post('/user', {
     name: '前端君',
 })

 

兩種寫法均可,大家可以根據自己的喜好和習慣,任選一種。

 

別名寫法是為了大家方便地閱讀和編寫代碼,除了 axios.get() 和 axios.post() ,axios還為所有支持的請求方式提供了別名。

 

axios.request()

axios.delete( )

axios.head( )

axios.put( )

axios.patch( )

 

這些別名用法大同小異,大家需要用到的時候,可以查看axios的API文檔,也十分簡單。

 

除了以上常用的API以外,axios還提供了其他API,允許開發者配置默認值,攔截器,處理錯誤和消除請求等操作,十分簡單易用,在這裡就不一一展開講述了。

 原創教程:《ECMAScript 6 系列》

 原創教程:《Vue2.0基礎系列》

 附加習題:《ECMAScript 6 系列》的 2套

 附加習題:《Vue2.0基礎系列》的 1 套

 職場感悟:混口飯吃,談不上喜歡

 感到迷茫:我很努力,但依然很迷茫

 薪資待遇:那麼點工資,能招到人嗎?

 搞笑黑話:網際網路公司黑話,搞笑到爆

其實學好技術並不難,架構師免費分享全網全套最新web前端、JavaScript、HTML5、PHP、資料庫……等視頻資料!

[總價值超3萬!]年薪35萬以上的大牛幾乎都看了!

加微信: abc15689892 免費領取,由於領取的朋友比較多,所以加微信時一定要備註:555,否則很難通過。

相關焦點

  • vue中簡單的axios二次封裝
    前端技術真是一個發展飛快的領域,jquery的時代,那時用的是 ajax 來處理數據請求。現在vue時代已經到來,axios 和 fetch都已經開始分別搶佔「請求」這個前端高地。本文將會嘗試著闡述他們之間的區別,並給出自己的一些理解。
  • Springboot Vue Login(從零開始實現Springboot+Vue登錄)
    小Hub領讀:一個完整的Spirngboot+vue實現登錄的小例子,我之前在vueblog中也搞過,哈哈,再來回顧一下!
  • Vue開發使用Axios遇到了大坑!
    最近在趕項目,項目需要一定基礎錄入數據,所以邊開發邊讓同事進行數據錄入,但是遇到了天坑!我使用angular的http請求,區域網內連接開發工程,一切正常!使用Vue的axios連接部分正常,部分不正常,伺服器狀態碼200,伺服器端控制臺也不報錯。但是頁面請求就是報錯。
  • Spring Boot+Vue|axios異步請求數據的12種操作(上篇)
    基於 RESTful 架構如何操作等等,今天楠哥就把這些不同的請求方式做了一個匯總,一次性寫清楚,以後需要用的時候直接來查這篇文章即可。 DELETE 請求 + 普遍變量傳參12、基於 RESTful 的 DELETE 請求 + JSON 傳參Vue 中異步請求使用 axios 組件來完成,axios 是一個基於Promise 用於瀏覽器和 nodejs 的 HTTP 客戶端,可以用在瀏覽器和 node.js 中。
  • Fetch還是Axios——哪個更適合HTTP請求?
    JSON如前所述,當我們在使用 .fetch() 方法的時候,需要對響應數據使用某種方法,當我們在發送帶有請求的body時,需要對數據進行字符串化。在 axios 中,它是自動完成的,所以我們只需在請求中傳遞數據或從響應中獲取數據。它是自動字符串化的,所以不需要其他操作。讓我們看看如何從 fetch() 和 axios 獲取數據。
  • Vue與axios的完美結合
    連續實習了十來天,晚上還得趕項目,只能咕咕咕了~~~背景近期團隊中後臺的小夥伴向我反應,說:「你就不能統一給所有請求跨域攜帶cookie嗎?」的確,我的請求寫的很冗餘,出現了很多重複的東西,也因為我熟悉jquery ajax寫法的原因,我遲遲沒有放棄它。而只是單純使用jquery ajax的話,無疑是大材小用。
  • 實戰教學使用 Vue3 重構 Vue2 項目(萬字好文推薦)
    "^3.6.5",    "vue": "^3.0.0-0",    "vue-class-component": "^8.0.0-0",    "vue-router": "^4.0.0-0",    "vuex": "^4.0.0-0"  },  "devDependencies": {    "vite": "^1.0.0-rc.1",
  • fetch和axios接口調用方式的用法
    前端接口調用的幾種方式 ,有原生ajax ,基於jQuery的ajax ,fetch ,axios關於原生ajax ,基於jQuery的ajax都已經簡單介紹過,下面來看看es6接口調用方式fetch客戶端,本質上也是對原生Ajax的封裝,只不過它是Promise的實現版本它支持:支持瀏覽器和node.js支持promise能攔截請求和響應自動轉換JSON數據
  • 前端ajax或axios發送數據後端實體類接受(實例和報錯原因)
    小喵最近在學習用java做前後端數據雙向交互。用到最多的就是ajax和vue組件的axios來傳數據到後端。首先,小喵在學習的過程中發現如果在數據傳輸過程中各種報錯的話,可能是在哪些方面的。這個時候需要通過html的開發者工具裡,小喵一般是用console.log()來輸出結果看是否會是js沒有獲取到表單數據情況2,有可能是js獲取到數據,但是並沒有成功發送數據出去。
  • 記一次佳vue nginx springcloud oauth2.0三方系統登錄中問題處理過程
    於是在國慶節前一天的晚上,我決定把登錄頁最後的功能oauth2.0三方系統登錄給搞定,因為後端代碼半年前就已經搞定,無奈前端是自己的弱項,一直沒有開工。所以前端的請求代碼寫一寫,應該很快。誰知一折騰就是近半個月了。。。
  • Fetch還是Axios,哪個更適合HTTP請求?
    這些功能之一是Fetch API,它提供了一種簡單的全局 .fetch() 方法,這是一種從API異步獲取數據的邏輯解決方案。JSON如前所述,當我們在使用 .fetch() 方法的時候,需要對響應數據使用某種方法,當我們在發送帶有請求的body時,需要對數據進行字符串化。在 axios 中,它是自動完成的,所以我們只需在請求中傳遞數據或從響應中獲取數據。它是自動字符串化的,所以不需要其他操作。讓我們看看如何從 fetch() 和 axios 獲取數據。
  • Vue 3.0前的 TypeScript 最佳入門實踐
    // 默認情況從0開始為元素編號,也可手動為1開始enumColor{Red= 1, Green= 2, Blue= 4}let c: Color= Color.Green;let colorName: string= Color[2];console.log(colorName); // 輸出'Green'因為上面代碼裡它的值是
  • 基於 Laravel + Vue 組件實現文件異步上傳
    我們在上一篇教程中已經演示了如何通過 Request 請求實例獲取各種文本輸入數據,但是還有一種輸入數據我們沒有涉及到,那就是文件上傳。我們可以通過 Request 請求實例提供的 file 方法獲取用戶上傳文件,並將其保存到指定目錄從而完成文件上傳,接下來,我們將從前端到後端實現一個完整的用戶上傳文件功能,包括視圖、路由、控制器部分代碼。
  • 前端技術棧:5分鐘入門VUE+Element UI
    那不是一個全棧攻城獅的自我修養,雖然VUE出3.0了,但是入門還是建議VUE2.0 + Element UI,畢竟3.0還要等養肥了在學,現在教程太少,學習2.0之後在學3.0也能更加理解為什麼要這麼去改進VUE是啥?簡單來說就是一個JS框架Vue (讀音 /vjuː/,類似於 view) 是一套用於構建用戶界面的漸進式框架。
  • 20 道必看的 Vue 面試題|原力計劃
    Model 層代表數據模式,也可以在 Model 中定義數據修改和操作的業務邏輯;View 代表 UI 組件,它負責將數據模型轉化為 UI 展現出來,ViewModel 是一個同步 View 和 Model 的對象。2. 父組件向子組件傳值的方法?
  • 7個有用的 Vue開發技巧
    2.6 新增加的 Observable API ,通過使用這個 api 我們可以應對一些簡單的跨組件數據狀態共享的情況。如下這個例子,我們將在組件外創建一個 store,然後在 App.vue組件裡面使用 store.js 提供的 store和 mutation方法,同理其它組件也可以這樣使用,從而實現多個組件共享數據狀態。首先創建一個 store.js,包含一個 store和一個 mutations,分別用來指向數據和處理方法。
  • 20 道必看的 Vue 面試題 | 原力計劃
    Model 層代表數據模式,也可以在 Model 中定義數據修改和操作的業務邏輯;View 代表 UI 組件,它負責將數據模型轉化為 UI 展現出來,ViewModel 是一個同步 View 和 Model 的對象。2. 父組件向子組件傳值的方法?父組件傳遞的數據子組件用 props 方法接收。
  • 7個有用的Vue開發技巧
    今天我們介紹的是 vue.js 2.6 新增加的 Observable API ,通過使用這個 api 我們可以應對一些簡單的跨組件數據狀態共享的情況。如下這個例子,我們將在組件外創建一個 store,然後在 App.vue組件裡面使用 store.js 提供的 store和 mutation方法,同理其它組件也可以這樣使用,從而實現多個組件共享數據狀態。
  • 一個超詳細vue無限滾動vue-infinite-scroll插件的配置及使用詳解
    開發中總會遇到這種下拉加載的設計方案,Vue實現下拉加載最佳方案自然是使用vue-infinite-scroll來實現。接下來我們一起看下它的配置及使用方式。infinite-scroll-throttle-delay 檢查busy的值的時間間隔,默認值是200,因為vue-infinite-scroll的基礎原理是,vue-infinite-scroll會循環檢查busy的值,以及是否滾動到底,只有當:busy為false且滾動到底,回調函數才會執行安裝vue-infinite-scrollnpm install vue-infinite-scroll
  • Vue.js以業務為中心的常見面試題
    d,MVVM是數據綁定的入口,整合了Observer,Compile和Wathcher三者,通過Observer來監聽自己的model數據變化,通過Compile來解析編譯模板指令,最終利用Watcher來搭起Observer和Compile之間的通信橋梁,達到數據變化通知視圖更新的效果,利用視圖交互,變化更新數據model變更的雙向綁定效果。