VUE進階篇Part11(vue-route和前端狀態管理)---中

此章節內容包括:

1、Axios中的get請求
2、Axios中的post請求

1、Axios的get請求

ajax的作用是與服務端進行數據交互,並且從服務端拿到所需要的數據,說白了就是兩句話:

發送請求,攔截響應。

這裏的 axios 的作用和 ajax 的作用基本上是一樣的,用法上可能會有點區別。

官方一點的說法是:axios 是一個基於 Promise 用於瀏覽器和 nodejs 的 HTTP 客戶端,他本身具有以下特性:

  1. 從瀏覽器中創建 XMLHttpRequest
  2. 從 node.js 發出 http 請求
  3. 支持 Promise API
  4. 攔截請求和響應
  5. 轉換請求和響應數據
  6. 取消請求
  7. 自動轉換JSON數據
  8. 客戶端支持防止 CSRF/XSRF
使用方法

1、安裝

npm install axios

2、引入加載

在使用到axios 以 .vue 結尾的組件內引入,如 HelloWorld.vue

import axios from 'axios'

3、將 axios 全局掛載到 VUE 原型上

直接在其中一個組件上輸入以下代碼就可以,後面可以使用 this.$http 發送請求

Vue.prototype.$http = axios

寫在一起就是:

<template>
  <div class="hello">
    <h3>我是axios用來發送請求,攔截響應</h3>
  </div>
</template>

<script>

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

export default {
  name: 'sendget',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  },
}
</script>

4、發出請求,以cnode社區API爲例子

使用傳統的function寫法:

<template>
  <div class="hello">
    <h3>我是axios用來發送請求,攔截響應</h3>
    <button v-on:click="getDate()">發送請求</button>

    <ul>
      <li v-for="item in items">{{items.title}}</li>
    </ul>
  </div>
</template>

<script>
//這裏用到了vue,記得也要引入一下
import Vue from "vue";
import axios from "axios";

Vue.prototype.$http = axios;

export default {
  name: "sendget",
  data() {
    return {
      items: []
    };
  },
  methods: {
    getDate() {
      //2、提前將此處的this賦值給self,因爲這時候的this還是vue實例,下面通過self就可以拿到vue實例了
      var self = this;
      this.$http
        .get("https://cnodejs.org/api/v1/topics")
        //成功後調用的函數
        .then(function(res) {
          //1、此處方法內的this並不代表當前vue實例,代表的是window對象
          //this.items = res.data.data;
          self.items = res.data.data;
          console.log(res.data.data);
        })
        //失敗後調用的函數
        .catch(function(err) {
          console.log(err);
        });
    }
  }
};
</script>

但是推薦使用 es6 的寫法,上面的可以寫成下面的:

<template>
  <div class="hello">
    <h3>我是axios用來發送請求,攔截響應</h3>
    <button v-on:click="getDate()">發送請求</button>
    <ul>
      <li v-for="item in items">{{items.title}}</li>
    </ul>
  </div>
</template>

<script>
//這裏用到了vue,記得也要引入一下
import Vue from "vue";
import axios from "axios";

Vue.prototype.$http = axios;

export default {
  name: "sendget",
  data() {
    return {
      items: []
    };
  },
  methods: {
    getDate() {
      var self = this;
      //這裏直接在api後面寫參數,寫在params裏面
      this.$http.get("https://cnodejs.org/api/v1/topics", {
        params: {
          page: 1,
          limit: 20
        }
      });
      //或者直接把參數寫在api上,效果也是一樣的
      //this.$http.get('https://cnodejs.org/api/v1/topics?page=1&limit=20')

      //使用ES6語法寫的
      .then(res => {
      	this.items = res.data.data
      	console.log(res)
      })
      .catch(err => {
      	console.log(err)
      })
    }
  }
};
</script>

這裏使用CNODE社區官方的API爲例展開學習
獲取主題列表API:https://cnodejs.org/api/v1/topics
參數:
page - 頁碼
limit - 每頁顯示的數量

結果爲:

在這裏插入圖片描述在這裏插入圖片描述

2、Axios中的post請求

POST傳遞數據有兩種格式:

第一種:form­data 格式:xxx/xxx?page=1&limit=48
第二種:xwww­form­urlencoded { page: 1,limit: 10 }

在axios中,post請求接收的參數必須是form­data

用qs插件將post傳過去的數據是第2種格式,要將這個數據通過 qs.stringify() 處理一下,轉換爲第1種才能接收到

用法:

1、先下一個qs插件

npm install qs

2、引入一下 qs

import qs from 'qs'

qs.stringify() 可以對post過去的數據做處理

3、處理一下

<template>
  <div class="hello">
    <h3>我是axios用來發送請求,攔截響應</h3>
    <button v-on:click="getDate()">GET發送請求</button>
    <button v-on:click="postDate()">POST發送請求</button>
    <ul>
      <li v-for="item in items">{{items.title}}</li>
    </ul>
  </div>
</template>

<script>
//這裏用到了vue,記得也要引入一下
import Vue from "vue";
import axios from "axios";
//引入一下 qs
import qs from "qs";

Vue.prototype.$http = axios;

export default {
  name: "sendget",
  data() {
    return {
      items: []
    };
  },
  methods: {
    //使用postDate接受請求
    postDate() {
      this.$http
        //post請求裏面不能直接在連接後面寫參數,並且傳遞的數據需要qs.stringify()處理一下
        .post("https://cnodejs.org/api/v1/topics",qs.stringify({
            params: {
              page: 1,
              limit: 20
            }
          })
        )
        .then(res => {
          this.items = res.data.data;
          console.log(res);
        })
        .catch(err => {
          console.log(err);
        });
    }
  }
};
</script>

3、vuex中的store用法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章