axios+qs簡單實現post請求form-data格式

axios+qs簡單實現post請求form-data格式

  • 有的時候後臺接口以form-data的格式來接收參數,那麼默認的寫法後臺是拿不到參數的,這個時候前端必須得以form-data的格式來傳遞

核心知識

  • 1.引入qs
npm install -save qs
#or
<script src="https://cdn.bootcdn.net/ajax/libs/qs/6.9.4/qs.min.js"></script>

qs官網地址

  • 2.引入axios
npm install -save axios
#or
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.min.js"></script>

axios官網地址

  • 3axios簡單封裝
 //創建一個實例
        const $http = axios.create({
            baseURL: 'https://api.apiopen.top',
            timeout: 3000,
        });
        //全屏loading加載動畫
        let loadingInstance;
        $http.interceptors.request.use(
            config => {
            	//請求格式爲form-data時需設置
                config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
                loadingInstance = vm.$loading({
                    lock: true,
                    text: '加載中,請稍後...',
                    spinner: 'el-icon-loading',
                    background: 'rgba(255,255,255,0.7)'
                });
                return config;
            },
            err => {
                return Promise.reject(err);
            }
        )

        $http.interceptors.response.use(
            response => {
                loadingInstance && loadingInstance.close();
                return response.data;
            },
            err => {
                loadingInstance && loadingInstance.close();
                return Promise.reject(err);
            }
        );
  • 4.post請求代碼
//對參數進行處理
const data = Qs.stringify({
        page:this.page,
         count:this.count
     })
const { result,code,message } = await $http.post('/getWangYiNews',data)
if(code !== 200 ){
    this.$message({
        type: 'info',
        message: message
    });
    this.loading = false
    return;
}
this.tableData = result;
this.loading = false;
  • 5.結果
    在這裏插入圖片描述
  • 6.簡單的完整代碼(實現分頁+請求loading+模擬刪除+獲取數據)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>axios封裝</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.min.js"></script>
    <!-- 引入樣式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入組件庫 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.min.js"></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/qs/6.9.4/qs.min.js"></script>
</head>

<body>
    <div id="app">
        <el-button type="primary" round @click="handleGetWangYiNews">主要按鈕</el-button>
        <div style="max-width: 1000px;margin:20px auto;">
            <el-table
            border 
            v-loading="loading"
            :data="tableData" >
                <el-table-column label="時間">
                    <template slot-scope="scope">
                        <i class="el-icon-time"></i>
                        <span style="margin-left: 10px">{{ scope.row.passtime}}</span>
                    </template>
                </el-table-column>
                <el-table-column label="圖片">
                    <template slot-scope="scope">
                        <el-image
                        style="width: 140px; height: 88px"
                        :src="scope.row.image"
                        fit="scale-down"></el-image>
                    </template>
                </el-table-column>
                <el-table-column label="標題" prop="title"></el-table-column>
                <el-table-column label="外鏈">
                    <template slot-scope="scope">
                        <el-link type="primary" :href="scope.row.path" >外鏈</el-link>
                    </template>
                </el-table-column>
                <el-table-column label="操作">
                    <template slot-scope="scope">
                        <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">刪除
                        </el-button>
                    </template>
                </el-table-column>
            </el-table>
            <div class="block">
                <el-pagination
                  style="text-align: right;"
                  @size-change="handleSizeChange"
                  @current-change="handleCurrentChange"
                  :current-page="page"
                  :page-sizes="[5, 10, 15, 20]"
                  :page-size="5"
                  layout="total,sizes, prev, pager, next, jumper"
                  :total="20"
                  >
                </el-pagination>
              </div>
        </div>
        
    </div>
    <script>
        //創建一個實例
        const $http = axios.create({
            baseURL: 'https://api.apiopen.top',
            timeout: 3000,
        });
        let loadingInstance;
        $http.interceptors.request.use(
            config => {
                config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
                loadingInstance = vm.$loading({
                    lock: true,
                    text: '加載中,請稍後...',
                    spinner: 'el-icon-loading',
                    background: 'rgba(255,255,255,0.7)'
                });
                return config;
            },
            err => {
                return Promise.reject(err);
            }
        )

        $http.interceptors.response.use(
            response => {
                loadingInstance && loadingInstance.close();
                return response.data;
            },
            err => {
                loadingInstance && loadingInstance.close();
                return Promise.reject(err);
            }
        );
        const vm = new Vue({
            el: "#app",
            data: {
                tableData:[],
                loading:true,
                page: 1,
                count:5
            },
            mounted() {
                this.handleGetWangYiNews()
            },
            methods: {
                async handleGetWangYiNews() {
                    const data = Qs.stringify({
                        page:this.page,
                        count:this.count
                    })
                    const { result,code,message } = await $http.post('/getWangYiNews',data)
                    if(code !== 200 ){
                        this.$message({
                            type: 'info',
                            message: message
                        });
                        this.loading = false
                        return;
                    }
                    this.tableData = result;
                    this.loading = false;
                },
                handleDelete(index,row){
                    const _self = this;
                    setTimeout(function(){
                        _self.$message({
                            type: 'success',
                            message: '刪除成功!'
                        });
                        _self.handleGetWangYiNews()
                    },2000)
                },
                handleSizeChange(e){
                    this.count = e;
                    this.handleGetWangYiNews()
                    
                },
                handleCurrentChange(e){
                    this.page = e;
                    this.handleGetWangYiNews()
                    
                }
            }
        })
    </script>
</body>

</html>
  • 代碼效果
    在這裏插入圖片描述

重點主要是瞭解form-data格式

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