iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
Modern Web

前端我又來了 - 30天 Vue學好學滿系列 第 25

[30天 Vue學好學滿 DAY25] axios API

  • 分享至 

  • xImage
  •  

vue.js2.0後版本推薦使用axios來完成ajax請求
為Promise-based HTTP client
非同步,可於then後進行操作、catch錯誤處理,有finlly機制(同步)。

安裝

// npm
$ npm install axios

// yarn
$ yarn add axios

// CDN
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

引入於main.js

import axios from 'axios'
Vue.prototype.$axios = axios;

GET & POST

GET

依照官方案例呼叫於mounted。

mounted() {
  this.$axios
    .get("https://api.coindesk.com/v1/bpi/currentprice.json")
      // 成功
      .then((response) => console.log(response))
      // 錯誤處理
      .catch((error) => console.log(error))
      // 必執行,類似finally
      .then(console.log('must run'))
},

檢視log

https://ithelp.ithome.com.tw/upload/images/20210921/20129536aYLK2a4WQV.png


回傳為JSON格式,可透過.取數據,也可進行遍歷過濾...等操作。
以下範例調整為function形式(進行多處理)

.then(function (response) {
  console.log(response.data.bpi);
  console.log(response.data.bpi.USD);
})

檢視log

https://ithelp.ithome.com.tw/upload/images/20210921/20129536oe9wWuTraP.png


Get with params

.get("https://my.api.url", {
  params: {
    id: '0001',
  },
})

POST

基礎用法與GET相同。

this.$axios
    .post("https://my.api.url")
      // 成功
      .then((response) => console.log(response))
      // 錯誤處理
      .catch((error) => console.log(error))
      // 必執行,類似finally
      .then(console.log('must run'))

Post with request body

// 直接進行宣告
.post("https://my.api.url", {
  id: "0001",
  name: "su",
})

// 透過變數
.post("https://my.api.url", this.todo)

多併發請求

透過allspread實現

定義方法

methods: {
  doGetOne: function () {
    return this.$axios.get(
      "https://api.coindesk.com/v1/bpi/currentprice.json"
    );
  },
  doGetTwo: function () {
    return this.$axios.get(
      "https://api.coindesk.com/v1/bpi/currentprice.json"
    );
  },
}

mounted

mounted() {
  this.$axios.all([this.doGetOne(), this.doGetTwo()]).then(
    this.$axios.spread(function (acct, perms) {
      // API皆執行完成
      console.table(acct);
      console.table(perms.data);
    })
  );
},

檢視log

log1 :doGetOne return,完整回傳
https://ithelp.ithome.com.tw/upload/images/20210921/20129536i4seHwasUR.png


log2 :function doGetTwo,透過data取數據
https://ithelp.ithome.com.tw/upload/images/20210921/20129536JLga2mqu09.png


有錯誤請不吝指教!
參考資料
https://vuejs.org/v2/guide
https://ithelp.ithome.com.tw/articles/10194612
https://www.runoob.com/vue2/vuejs-ajax-axios.html
https://tools.wingzero.tw/article/sn/138
https://www.jb51.net/article/199256.htm

/images/emoticon/emoticon31.gif


上一篇
[30天 Vue學好學滿 DAY24] Vue Router-3
下一篇
[30天 Vue學好學滿 DAY26] axios & axios-mock-adapter
系列文
前端我又來了 - 30天 Vue學好學滿30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言