前端学习七(前后端数据交互axios)


axios官网:http://www.axios-js.com/zh-cn/docs/index.html#axios-request-config-1

一、axios请求和简写

一定要引入请求库aioxs

DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>title>
    
    <script src="https://unpkg.com/axios/dist/axios.min.js">script>
head>

<body>
    <script>
        // axios发送的是异步请求,返回的Promise是异步对象
        const rsp = axios.get("http://127.0.0.1:5000/api/projects")
        // 可以通过回调函数获取response对象
        rsp.then((result) => {
            console.log(result);
        })
        
        // 简写
        axios.get("http://127.0.0.1:5000/api/projects1").then((rsp) => {
            console.log(rsp);
            console.log(rsp.status);
            console.log(rsp.data);
        }).catch((error)=>{
            // 响应码是3、4、5会走这个步骤
            console.log(error);
        })
    script>
body>
html>

二、自定义状态码错误范围

    <script>
        axios.get("http://127.0.0.1:5000/api/projects1",
            {
                validateStatus: function (status) {
                    return status<500
                }
            }
        ).then((rsp) => {
            console.log(rsp);
            console.log(rsp.status);
            console.log(rsp.data);
        })
        // .catch((error) => {
        //     // 响应码是3、4、5会走这个步骤
        //     console.log(error);
        // })
    script>

三、实例化请求对象

    

四、get请求参数传递方式

五、post请求参数传递方式(表单、json)

 

六、axios结合async、await的使用

 

七、练习

DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>title>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js">script>
        <script src="https://unpkg.com/axios/dist/axios.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>
        <style type="text/css">
            body {
                background: url(lol.jpeg);
            }

            .box-card {
                width: 400px;
                margin: auto;
                margin-top: 200px;
                text-align: center;
                background-color: rgba(0, 0, 0, 20%);
                border: 0rem;
            }

            .el-input {
                padding: 8px;
            }
        style>
    head>
    <body>
        <div id="app">
            <el-card class="box-card">
                <h4>欢迎来到英雄联盟h4>
                <el-input v-model="loginData.usr" placeholder="请输入账号">el-input>
                <el-input v-model="loginData.pwd" placeholder="请输入密码" type="password">el-input>
                <el-button type="primary" style="margin-top: 10px;" @click="login()">登录el-button>
            el-card>

        div>
        <script type="text/javascript">
            const instance = axios.create({
                baseURL: 'http://127.0.0.1:5000',
                timeout: 1000,
            });

            var vue = new Vue({
                el: "#app",
                data: {
                    loginData: {
                        usr: "",
                        pwd: ""
                    }
                },
                methods: {
                    async login() {
                        try {
                            const rsp = await instance.post("/api/user/login", {
                                user: this.loginData.usr,
                                pwd: this.loginData.pwd
                            })
                        } catch (e) {
                            alert("网络异常")
                        }
                        console.log(rsp);
                        if (rsp.data.code == '1') {
                            const token = rsp.data.token;
                            console.log("获取token成功", token);
                            window.sessionStorage.setItem("token", token)
                        } else {
                            alert("登录失败")
                        }
                    }
                }
            })
        script>
    body>
html>