axios的根本利用

打印 上一主题 下一主题

主题 830|帖子 830|积分 2490

Axios笔记

一、Axios引言

Axios 是一个基于的JavaScript的网络请求库,用于从浏览器向服务器发起网络请求。Axios解决的题目:

现在为止,我们学习了html、css和js以及vue。借助html和css我们可以呈现出肯定的页面结果。利用js和vue我们可以将数据回显到页面。但是如今页面的数据都是硬编码的,现实场景下数据肯定是来源于服务端的。而Axios就能向服务端发起网络请求,解决页面数据来源的题目。
二、Axios 根本利用

0 情况预备

在tomcat服务器中部署一个 axios-test 项目,项目中放置一个数据文件:users.json。内容如下:
  1. [
  2.     {"id":1,"name": "小明", "age": 13, "gender": "男"},
  3.     {"id":2,"name": "小红", "age": 13, "gender": "女"},
  4.     {"id":3,"name": "小绿", "age": 4, "gender": "男"},
  5.     {"id":4,"name": "小翠", "age": 14, "gender": "女"}
  6. ]
复制代码
并放置一个html文件用来学习axios(因为浏览器的限制,必须同一个项目的页面才可以访问同一个项目的数据资源),团体目录布局如下:

1 get方式发起请求

直接请求
  1. //发送GET方式请求
  2. axios.get("url")
  3.      .then(function(response){ //处理响应
  4.             console.log(response.data);
  5.          }).catch(function(err){//捕获异常
  6.             console.log(err);
  7.          });
复制代码
示例:访问users.json数据文件
  1. <button @click="test">点击</button>
  2. new Vue({
  3.     el:"#app",
  4.     methods:{
  5.         test(){
  6.           axios.get("http://localhost:8080/axios-test/users.json").then(function(response){      //得到成功的响应,状态码200,执行then中的内容
  7.             console.log(response.data);
  8.           }).catch(function(err){
  9.             console.log(err);
  10.           });
  11.         }
  12.     }
  13. });
复制代码
携带参数请求
  1. //1. 使用params发送请求参数
  2. axios.get("url",{params:{/*请求参数*/}}).then(function(response){
  3.     console.log(response.data);
  4. }).catch(function(err){
  5.     console.log(err);
  6. });
  7. 注意:get方式发起请求如果携带参数,参数会以k=v形式拼接在url中。
  8.         1.多对数据之间使用&连接
  9.         2.请求参数和请求地址使用?连接
  10. //2. 直接拼接k=v参数到url
  11. axios.get("url?k1=v1&k2=v2").then(function(response){
  12.     console.log(response.data);
  13. }).catch(function(err){
  14.     console.log(err);
  15. });
复制代码
示例:携带name和age参数发起请求

  1. axios.get("http://localhost:8080/axios-test/users.json",{params:{name:"xiaohei",age:18}})
  2.      .then(function(response){//得到成功的响应,状态码200,执行then中的内容
  3.             console.log(response.data);
  4.      }).catch(function(err){
  5.            console.log(err);
  6.      });
  7. axios.get("http://localhost:8080/axios-test/users.json?name=xiaohei&age=18")
  8.      .then(function(response){      //得到成功的响应,状态码200,执行then中的内容
  9.          console.log(response.data);
  10.      }).catch(function(err){
  11.          console.log(err);
  12.      });
复制代码
2 post方式发起请求

直接请求
  1. //发送POST方式请求
  2. axios.post("url").then(function(response){//处理响应
  3.     console.log(response.data);    //响应成功后,进入这里
  4. }).catch(function(err){//捕获异常
  5.     console.log(err);  //响应失败后,进入这里
  6. });
复制代码
示例:访问users.json数据文件
  1. axios.post("http://localhost:8080/axios-test/users.json")
  2.     .then(function(response){//处理响应
  3.           console.log(response.data);    //响应成功后,进入这里
  4.     }).catch(function(err){//捕获异常
  5.         console.log(err);  //响应失败后,进入这里
  6.     });
复制代码
携带参数请求
  1. <script>
  2. test6(){
  3.     axios.post("http://localhost:8080/axios_test/users.json",'name=cpx&age=20')
  4.     .then(function(response){//处理响应
  5.     console.log(response.data);    //响应成功后,进入这里
  6.     }).catch(function(err){//捕获异常
  7.     console.log(err);  //响应失败后,进入这里
  8.     });
  9. },
  10. test7(){
  11.     //axios.post("http://localhost:8080/axios_test/users.json",{name:'cpx',age:20})
  12.     let u = {name:'cpx',age:20};
  13.     let {name,age} = u;
  14.     let data = `name=${name}&age=${age}`;
  15.     axios.post("http://localhost:8080/axios_test/users.json",data)
  16.     .then(function(response){//处理响应
  17.     console.log(response.data);    //响应成功后,进入这里
  18.     }).catch(function(err){//捕获异常
  19.     console.log(err);  //响应失败后,进入这里
  20.     });
  21. }
  22. </script>
  23. <!--
  24.         需要额外引入qs.js,完成json对象转换k=v参数对
  25. -->
  26. <script src="js/qs-6.9.4.js"></script>
  27. <script>
  28. //发送POST方式请求
  29. axios.post("url",Qs.stringify({/*请求参数*/}).then(function(response){
  30.     console.log(response.data);    //成功响应进入这里
  31. }).catch(function(err){
  32.     console.log(err);  //失败响应进入这里
  33. });
  34. </script>
复制代码
示例:携带name和age参数发起请求

  1. axios.post("http://localhost:8080/axios-test/users.json",Qs.stringify({name:"xiaohei",age:18}))
  2. .then(function(response){//处理响应
  3.     console.log(response.data);    //响应成功后,进入这里
  4. }).catch(function(err){//捕获异常
  5.     console.log(err);  //响应失败后,进入这里
  6. });
复制代码
2.3 get和post的区别

get方式:


  • get请求不安全(数据会作为url的一部分)
  • get请求发送数据量有限制(受限于浏览器地点栏允许的字符数量)
  • get请求只能发送文本数据(字符串)
post方式:


  • post请求更安全(请求参数在请求体中)
  • post请求发送的数据量无限制
  • post请求能发送更多的数据范例 (文本数据和二进制文件,比如文件上传肯定要利用post)
2.4 a标签和axios异步请求的区别

a标签:


  • 请求携带的请求参数只能拼接在地点后,也就只能携带文本数据
  • 同步的请求:会发生页面跳转,相应回的结果通常会覆盖掉原有页面的内容,一旦原页面被覆盖原页面将无法利用。
axios:


  • 请求携带的请求参数可以拼接在地点后,也可以在请求体中。可以携带各种范例的请求数据。
  • 异步请求:不进行页面跳转,新的结果不会覆盖原页面,当然也就必须手动编码将数据回显到页面。
3 综合案例

利用axios从服务器获取数据,并回显到页面。开发思路:

  • 需要通过axios获取users.json数据
  • 通过v-for指令将数据回显到表格中
  • axios的执行时机需要在页面加载完毕后立刻执行,也就是在create钩子函数中执行
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.         <meta charset="UTF-8">
  5.         <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6.         <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7.         <title>Document</title>
  8.         <script src="js/vue-2.6.12.js"></script>
  9.     <script src="js/axios-0.21.0.js"></script>
  10.         <script src="js/qs-6.9.4.js"></script>
  11. </head>
  12. <body>
  13.         <div id="app">
  14.                 <table border="1">
  15.                                 <thead>
  16.                                         <tr>
  17.                                                 <td>
  18.                                                         <input type="button" value="删除选中" @click="removeChecked">
  19.                                                 </td>
  20.                                                 <td>
  21.                                                         姓名
  22.                                                 </td>
  23.                                                 <td>
  24.                                                         年龄
  25.                                                 </td>
  26.                                                 <td>
  27.                                                         性别
  28.                                                 </td>
  29.                                                 <td>操作</td>
  30.                                         </tr>
  31.                                 </thead>
  32.                                 <tbody>
  33.                                         <tr v-for="(u,index) in users" :key="u.id">
  34.                                                 <td>
  35.                                                         <input type="checkbox" name="id" id="" :value="u.id" v-model="checked">
  36.                                                 </td>
  37.                                                 <td>{{u.name}}</td>
  38.                                                 <td>{{u.age}}</td>
  39.                                                 <td>{{u.gender}}</td>
  40.                                                 <td>
  41.                                                         <a href="" @click.prevent="remove(u.id)">删除</a>
  42.                                                         <a href="">更新</a>
  43.                                                 </td>
  44.                                         </tr>
  45.                                        
  46.                                         <tr>
  47.                                                 <td colspan="5">
  48.                                                         <input type="button" value="全选" @click="selectAll()">
  49.                                                         <input type="button" value="全不选" @click="unselectAll()">
  50.                                                         <input type="button" value="反选" @click="reverseSelect()">
  51.                                                 </td>
  52.                                         </tr>
  53.                                 </tbody>
  54.                         </table>
  55.                        
  56.                 </div>
  57.                 <script type="text/javascript">
  58.                         new Vue({
  59.                                 el:"#app",
  60.                                 data:{
  61.                                         users:[],
  62.                                     checked:[1]
  63.                                 },
  64.                                 methods:{
  65.                                         selectAll(){
  66.                                                 this.checked = this.users.map(u=>u.id);
  67.                                         },
  68.                                         unselectAll(){
  69.                                                 this.checked = [];
  70.                                         },
  71.                                         reverseSelect(){
  72.                                                 this.checked = this.users.map(u=>u.id).filter(id=>this.checked.indexOf(id)<0);
  73.                                         },
  74.                                         remove(id){
  75.                                                 // alert(index);
  76.                                                 let index = this.users.map(u=>u.id).indexOf(id);
  77.                                                 if(index < 0){
  78.                                                         return;
  79.                                                 }
  80.                                                 this.users.splice(index,1);
  81.                                         },
  82.                                         removeChecked(){
  83.                                                 for(let i = 0; i < this.checked.length;i++){
  84.                                                         this.remove(this.checked[i])
  85.                                                 }
  86.                                         }
  87.                                 },
  88.                 created:function(){
  89.                     axios.get("http://localhost:8080/axios-test/users.json")
  90.                         .then(resp=>{
  91.                             this.users = resp.data;
  92.                         }).catch(error=>{
  93.                             console.log(error);
  94.                         })
  95.                 }
  96.                         })
  97.                 </script>
  98. </body>
  99. </html>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

道家人

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表