Ajax-入门、axios请求方式、async、await、Vue生命周期

一. Ajax介绍

Ajax:Asyncharonous JavaScript And Xml,异步的JavaScript和XML(Extensible Markup Language 可扩展标记语言,本质是一种数据格式,可以用来存储复杂的数据结构)

作用:

(1) 数据交换 通过Ajax可以给服务器发送请求,并获取服务器响应的数据

(2) 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等;

二. Axios

  1. 介绍:Axios对原生的Ajax进行了封装,简化书写,快速开发

  2. 官网:https://www.axios-http.cn/

3.步骤:

(1) 引入Axios的js文件(参照官网)

javascript 复制代码
<!-- 1. 引入Axios -->
<script src="https://unpkg.com/axios/dist/axios.min.js">
  
</script>

(2) 使用Axios发生请求,并获取响应结果

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax入门</title>
</head>
<body>

</body>
<!-- 1. 引入Axios -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
    //   使用Axios发生请求,并获取响应结果
axios({
    // 配置对象
   //请求方式 GET/POST
    method:'get',
    //请求路径
    url:'https://mock.apifox.cn/m1/3083103-0-default/emps/list',
    //POST 请求参数
    // data:{
    //     name:'张三',
    //     age:18
    // },
    //get请求参数 或者直接拼到URL后面
    params:{
        name:'张三',
        age:18 
    }
}).then((result) =>{
    // 响应结果
    console.log(result.data);
}).catch((error) =>{
    // 响应失败
    alert.log(error);
})
</script>
</html>
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax入门-Axios</title>
</head>
<body>
    <input type="button" value="获取数据-GET" id="btnGet">
    <input type="button" value="获取数据-POST" id="btnPost">
    
</body>
<!-- 1. 引入Axios -->
<script  src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
   //发送Get请求
   document.querySelector('#btnGet').addEventListener( 'click',  () =>{
        axios({
            method:'GET',
            //请求路径并拼接参数  
            url:'https://mock.apifox.cn/m1/3083103-0-default/emps/list'
        }).then((result) =>{
            console.log(result.data);
        }).catch((error) =>{
            alert.log(error);
        })
    })

    //发送Post请求
    document.querySelector('#btnPost').addEventListener('click', () =>{
        axios({
            method:'post',
            url:'https://mock.apifox.cn/m1/3083103-0-default/emps/update'
            //Post请求参数
            // data:{
            //     type:'social'
            // }
        }).then((result) =>{
            console.log(result.data);
        }).catch((error) =>{
            alert.log(error);
        }) 
 }) 
</script>
</html>

三. Axios-请求方式别名

为了方便起见,Axios已经为所有支持的请求方法提供了别名

格式:axios.请求方式(url [, data[, config]])

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ajax入门-Axios简化</title>
</head>
<body>
    <input type="button" value="获取数据-GET" id="btnGet">
    <input type="button" value="获取数据-POST" id="btnPost">
    
</body>
<!-- 1. 引入Axios -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
  //发送Get请求
  document.querySelector('#btnGet').addEventListener('click', () =>{
        //axios简化
        axios.get('https://mock.apifox.cn/m1/3083103-0-default/emps/list').then((result) =>{
            console.log(result.data);
        }).catch((error) =>{
            alert.log(error);
        })
    })

    //发送Post请求
    document.querySelector('#btnPost').addEventListener('click', () =>{
         //axios简化
         axios.post('https://mock.apifox.cn/m1/3083103-0-default/emps/update',
            'name=韦一笑'
        ).then((result) =>{
            console.log(result.data);
        }).catch((error) =>{
            alert.log(error);
        })
}) 

  
</script>
</html>

四. 案例

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Axios案例</title>
</head>
<body>
    <div id="container">
        <hr></hr>
        {{searchFrom}}
        <form class="search-from">
            <label for="name">姓名</label>
            <input type="text" name="name" id="name" v-model="searchFrom.name" placeholder="请输入姓名">
            <label for="gender">性别</label>
            <select name="gender" id="gender"  v-model="searchFrom.gender">
                <option value="1">男</option>
                <option value="2">女</option>
                <option value="3">未知</option>
            </select>
            <button type="button" v-on:click="search">查询</button>
            <button type="button" @click="clear">重置</button>
        </form>
        <hr>
        <table border="1"  style="width: 50%;height: 50%;">
            <thead>
                <tr>
                    <th>编号</th>
                    <th>姓名</th>
                    <th>性别</th>
                    <th>头像</th>
                </tr>
                <tbody>
                    <tr v-for="(item,index) in list" :key="item.id">
                        <td>{{item.id}}</td>
                        <td>{{item.name}}</td>
                        <td>
                            <!-- v-if 控制-->
                            <span v-if="item.gender==1">男</span>
                            <span v-else-if="item.gender==2">女</span>
                            <span v-else>未知</span>

                            <!-- v-show 控制-->
                            <!-- <span v-show="item.gender==1">男</span>
                            <span v-show="item.gender==2">女</span>
                            <span v-show="item.gender!=1 && item.gender!=2">未知</span> -->
                        </td>
                         <td><img class="avatar" v-bind:src="item.image" :alt="item.name"></td>

                    </tr>
                </tbody>
            </thead>
        </table>
    </div>
</body>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="module">
    import {createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
    createApp({
        data(){
            return {
                //封装查询条件
                searchFrom:{
                    name:'',
                    gender:''
                },
                // 数组
                list:[ 
                ]
            }
        },
        //方法
        methods:{
            
            //查询
            search(){
               //简写
               axios.get(`https://mock.apifox.cn/m1/3083103-0-default/emps/list?name=${this.searchFrom.name}&gender=${this.searchFrom.gender}`).then((result) =>{
                this.list=result.data.data;
               }).catch((error) =>{
                   console.log(error);
               })
            },
            //清空表单项数据
            clear(){
                this.searchFrom.name='';
                this.searchFrom.age='';
                this.searchFrom.gender='';
                this.search();
            }
        }
    }).mount('#container');

</script>
</html>

五. async & await

可以通过async、await可以让异步变为同步操作。

async就是用来声明一个异步方法,await是用来等待异步任务执行。

await关键字只在async函数内有效,await关键字取代then函数,等待获取到请求成功的结果值。

javascript 复制代码
 //查询
           async search(){
               //简写
               let result = await axios.get(`https://mock.apifox.cn/m1/3083103-0-default/emps/list?name=${this.searchFrom.name}&gender=${this.searchFrom.gender}`);
               this.list=result.data.data;
            },

六. Vue生命周期

上述代码会在页面刷新时清空数据(列表展示为空),需要调用钩子方法来加载页面。

生命周期:指一个对象从创建到销毁的整个过程

生命周期的八个阶段:每触发一个生命周期事件,会自动执行一个生命周期方法(钩子)

生命生命周期方法:与data平级

|---------------|-------|
| 状态 | 阶段周期 |
| beforCreate | 创建前 |
| created | 创建后 |
| beforeMount | 载入前 |
| mounted | 挂载完成 |
| beforeUpdate | 数据更新前 |
| updated | 数据更新后 |
| beforeUnmount | 组件销毁前 |
| unmounted | 组件销毁后 |

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue生命周期</title>
</head>
<body>
    <div id="container">
        <hr></hr>
        {{searchFrom}}
        <form class="search-from">
            <label for="name">姓名</label>
            <input type="text" name="name" id="name" v-model="searchFrom.name" placeholder="请输入姓名">
            <label for="gender">性别</label>
            <select name="gender" id="gender"  v-model="searchFrom.gender">
                <option value="1">男</option>
                <option value="2">女</option>
                <option value="3">未知</option>
            </select>
            <button type="button" v-on:click="search">查询</button>
            <button type="button" @click="clear">重置</button>
        </form>
        <hr>
        <table border="1"  style="width: 50%;height: 50%;">
            <thead>
                <tr>
                    <th>编号</th>
                    <th>姓名</th>
                    <th>性别</th>
                    <th>头像</th>
                </tr>
                <tbody>
                    <tr v-for="(item,index) in list" :key="item.id">
                        <td>{{item.id}}</td>
                        <td>{{item.name}}</td>
                        <td>
                            <!-- v-if 控制-->
                            <span v-if="item.gender==1">男</span>
                            <span v-else-if="item.gender==2">女</span>
                            <span v-else>未知</span>

                            <!-- v-show 控制-->
                            <!-- <span v-show="item.gender==1">男</span>
                            <span v-show="item.gender==2">女</span>
                            <span v-show="item.gender!=1 && item.gender!=2">未知</span> -->
                        </td>
                        <td><img class="avatar" v-bind:src="item.image" :alt="item.name"></td>

                    </tr>
                </tbody>
            </thead>
        </table>
    </div>
</body>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="module">
    import {createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
    createApp({
        data(){
            return {
                //封装查询条件
                searchFrom:{
                    name:'',
                    gender:''
                },
                // 数组
                list:[ 
                ]
            }
        },

        //生命周期 钩子函数
        mounted(){
            //页面加载完成之后 发送ajax请求
            this.search();
        },


        
        //方法
        methods:{
            //查询
           async search(){
               //简写
               let result = await axios.get(`https://mock.apifox.cn/m1/3083103-0-default/emps/list?name=${this.searchFrom.name}&gender=${this.searchFrom.gender}`);
               this.list=result.data.data;
            },
            //清空表单项数据
            clear(){
                this.searchFrom.name='';
                this.searchFrom.age='';
                this.searchFrom.gender='';
                this.search();
            }
        }
    }).mount('#container');

</script>
</html>
相关推荐
_r0bin_40 分钟前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
IT瘾君41 分钟前
JavaWeb:前端工程化-Vue
前端·javascript·vue.js
zhang988000041 分钟前
JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
开发语言·javascript·vue.js
potender43 分钟前
前端框架Vue
前端·vue.js·前端框架
站在风口的猪11081 小时前
《前端面试题:CSS预处理器(Sass、Less等)》
前端·css·html·less·css3·sass·html5
程序员的世界你不懂2 小时前
(9)-Fiddler抓包-Fiddler如何设置捕获Https会话
前端·https·fiddler
MoFe12 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
去旅行、在路上2 小时前
chrome使用手机调试触屏web
前端·chrome
Aphasia3113 小时前
模式验证库——zod
前端·react.js
lexiangqicheng3 小时前
es6+和css3新增的特性有哪些
前端·es6·css3