Axios异步通信

news2024/12/26 21:25:44

四.Axios异步通信

1 什么是Axios?

Axios是一个类库,基于Promise管理的HTTP 库,是前端通信框架,可以用在浏览器和 node.js 中。axios实现了对ajax的封装,常用于Ajax请求。

注解:promise是Java Script的一个对象,代表了未来将要发生的事件,用来传递异步操作的消息。

2 Axios和Ajax的关系

Axios是AJAX技术的一种实现,就像Jquery中的$.ajax也是AJAX技术的一种实现。

Axios是通过Promise实现XHR封装,其中Promise是控制手段,XHR是实际发送Http请求的客户端。

Jquery中的$.ajax是通过callback+XHR实现(XHR就是XmlHttpRequest对象)

再通俗一点讲:AJAX是汽车,Axios是奥迪,$.ajax是奔驰

3 为什么要用Axios?

因为vue的边界很明确,就是为了处理DOM,所以并不具备通信功能,为了解决通信问题,作者单独开发了一个名为 vue-resource 的插件,不过在进入 2.0 版本以后停止了对该插件的维护并推荐了 Axios 框架,此时就需要额外使用一个通信框架与服务器交互。

功能就像jQuery提供的AJAX通信功能。

4 Axios的API


axios({
	method: 'get',
	url: '/user/12345',
	data: {
	id:1,
	name:'aa'
	}
});

axios.get('url'[,'参数']).then(resp=>(this.user=resp.data));
        		
axios.post('url'[,'参数']).then(resp=>(this.user=resp.data));

axios.put('url'[,'参数']).then(resp=>(this.user=resp.data));

axios.delete('url'[,'参数']).then(resp=>(this.user=resp.data));

5 Axios的使用

​ axios提供了多种请求方式,比如直接发起get或post请求:

5.1.get请求

案例1

a.模拟后端接口传递回的json数据

咱们后端开发的接口大部分都是采用 JSON 格式,我们可以创建一个文件存放json数据用来模拟后端接口传递过来的数据。

user.json页面:模拟服务器端返回的数据

{
  "id":1,
  "name": "呆萌老师",
  "qq": "2398779723",
  "weixin":"it_daimeng",
  "address": {
    "country": "中国",
    "city": "上海"
   
  }
}

b.通过axios 跟服务器端 交互

​ index.html :

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript" src="js/vue.js" ></script>
		<!--在线引入axios。在项目开发中会安装axios组件(npm install axios)-->
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
	</head>
	<body>
		
		<div id="app">
			
		  <input type="button" value="请求数据"  v-on:click="getUserInfo" />
			
		   <div>id:<span>{{user.id}}</span></div>
		   <div>name:<span>{{user.name}}</span></div>
		   <div>qq:<span>{{user.qq}}</span></div>
		   <div>weixin:<span>{{user.weixin}}</span></div>
		   <div>address:<span>{{user.address.country}}/{{user.address.city}}</span></div>
		
		</div>
		
		<script>
		
        var v=new Vue({
        	
        el:"#app",
       
        data:function(){//处理返回的数据   (后台返回的数据在页面上渲染时使用)
            return{
                //请求的返回参数格式必须和json字符串一样
                user:{
                	id:null,
                    name:null,//相当于形参占位,实际参数user.json会传递过来
                    qq:null,
                    weixin:null,
                    address:{
                        country:null,
                        city:null
                        
                    }
                }
            }
        },
        
        methods:{
        	
        	getUserInfo:function(){
        		
        		console.log("aaa");
        		
        	// axios.get('user.json').then(resp=>(console.log(resp.data)));
            // resp.data 存放的是响应回来的数据
            axios.get('user.json').then(resp=>(this.user=resp.data));
        		
        	}
        	
        }
        
//      //mounted钩子函数,页面加载时触发的函数
//      mounted:function(){
//         this.getUserInfo();
//      }
	    })
		</script>

		
		
		
	</body>
</html>


c.测试:

在这里插入图片描述

在这里插入图片描述

d.说明:

这里使用 axios 框架的 get 方法请求 AJAX 并自动将数据封装进了 Vue 实例的数据对象中
我们在data中的数据结构必须要和Ajax响应回来的数据格式匹配!

e.也可以设置参数:

// 为给定 ID 的 user 创建请求
axios.get('/user?id=1')
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

// 可选地,上面的请求可以这样做
axios.get('/user', {
    params: {
      ID: 12345
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

案例2:

带参数的get请求

a.准备服务器端代码,这里以java代码为例

package com.example.axios_test.controller;
import com.example.axios_test.pojo.User;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;

@RestController
public class UsersController {


      @GetMapping("/users/{id}")
      //设置跨域 允许客户端的域名访问此方法,注意看你自己的客户端域名
      @CrossOrigin(value = "http://127.0.0.1:8020")
      public User getUserById(@PathVariable("id") int id)
      {
                HashMap<Integer,User> hashMap=new HashMap<>();
                hashMap.put(1,new User(1,"汪老师"));
                hashMap.put(2,new User(2,"呆萌老师"));
                return hashMap.get(id);

      }
}

b.前端页面通过axios请求后端数据

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript" src="js/vue.js" ></script>
		
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
	</head>
	<body>
		
	  	<div id="app">
			
		  <input type="button" value="请求数据"  v-on:click="getUserInfo(2)" />
			
		   <div>id:<span>{{user.id}}</span></div>
		   <div>name:<span>{{user.name}}</span></div>
		</div>
		
		<script>
		
        var v=new Vue({
        	
        el:"#app",
       
        data:function(){//处理返回的数据   (后台返回的数据在页面上渲染时使用)
            return{
                //请求的返回参数格式必须和json字符串一样
                user:{
                	id:null,
                    name:null
                }
            }
        },
        
        methods:{
        	
        	getUserInfo:function(id){
        
            axios.get('http://localhost:8080/users/'+id).then(resp=>(this.user=resp.data));
        		
        	}
        	
        }
        

	    })
		</script>
	</body>
</html>


c 测试

在这里插入图片描述

5.2.post请求

模拟一下用axios中用post方式提交表单数据,再处理返回结果

a.模拟服务器端接收前端提交的表单数据并处理

     @PostMapping("/users")
      @CrossOrigin(value = "http://127.0.0.1:8020")
      //如果发送请求过来的数据类型是json格式,则这里接收的时候 用 @RequestBody
      public String checkLogin(String uname,String upwd) {


          if(uname.equals("daimenglaoshi") && upwd.equals("666") )
          {

              return "ok";
          }
          else
          {
              return "error";
          }

      }

b.前端post方式提交表单数据

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript" src="js/vue.js" ></script>
		<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
	</head>
	<body>
		
		
		<form action="method" id="loginForm" >
			
			用户名:<input type="text" name="uname" v-model="uname" />
			密码:<input type="password" name="upwd" v-model="upwd" />
			
			<input v-on:click="login" type="button" name="btn" value="登录" />
			
			
		</form>
		
		<script>
			
			var v=new Vue({
				
				el:"#loginForm",
				data:{				
					uname:"",
					upwd:""					
				},
				methods:{
					
					login:function(){						
					
						axios.post("http://localhost:8080/users","uname="+this.uname+"&upwd="+this.upwd).then(function(response) {
						    console.log(response);
						})
					
					}
					
					
				}
			})
			
			
		</script>
		
		
		
	</body>
</html>


c.测试

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(附源码)Springboot校园健康检测管理系统 毕业设计 151047

Springboot校园健康检测管理系统的设计 摘 要 亚健康低龄化和高职业压力使高校师生健康问题凸显&#xff0c;不及早进行干预和控制将严重影响师生健康。如何理解和应用健康管理的理论和方法&#xff0c;探索高校师生健康管理工作模式&#xff0c;是目前高校医院的重点工作 校园…

Thymeleaf 预处理表达式__${表达式}__使用案例

目录一. 前期准备1.1 国际化项目获取类1.2 国际化配置文件类1.3 项目配置文件1.4 国际化资源文件二. __${表达式}__预处理表达式2.1 在Thymeleaf中使用Spring的Bean2.2 通过#{}获取国际化资源2.3 预处理表达式__${表达式}__的使用三. 效果四. 表格案例一. 前期准备 1.1 国际化…

图神经网络 # GNN基础(干货版)

注意&#xff1a;本篇文章不是系统性的图神经网络或者图深度学习的入门教程&#xff0c;而是介绍如何入门图神经网络的学习指南以及相关的干货笔记&#xff0c;文中会列出一些视频和文章学习资料&#xff0c;并在本文作一些重点的摘要&#xff0c;读者需要自行前往文本超链接的…

【C语言】通讯录《信息写到文件版本》

&#x1f6a9;write in front&#x1f6a9; &#x1f50e;大家好&#xff0c;我是謓泽&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f3c5;2021年度博客之星物联网与嵌入式开发TOP5&#xff5…

非零基础自学Golang 第9章 结构体 9.5 结构体方法

非零基础自学Golang 文章目录非零基础自学Golang第9章 结构体9.5 结构体方法9.5.1 指针类型接收者9.5.2 值类型接收者第9章 结构体 9.5 结构体方法 Go语言中&#xff0c;一个方法就是一个包含了接收者的函数。 对于结构体方法&#xff0c;接收者可以是结构体类型的值或是指针…

【图像融合】对比度增强结合多尺度边缘保持分解红外与可见光图像融合【含Matlab源码 1886期】

⛄一、对比度增强结合多尺度边缘保持分解红外与可见光图像融合简介 1 引言 夜视成像技术在军事与执法领域&#xff0c;如监控&#xff0c;侦查&#xff0c;情报搜集和安保等方面有着重要应用。不同类型的夜视成像传感器在记录同一场景时&#xff0c;在其提供的信息中有部分是冗…

目标检测论文解读复现【NO.21】基于改进YOLOv7的小目标检测

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

Java项目:基于SSM的高校运动会管理系统的设计与实现

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该高校运动会信息管理系统是以B/S架构为设计基础并基于SSM框架开发的系统。系统采用了Java语言和MySQL数据库来实现。 系统按预定的算法完成了创…

数据结构---删去k个数字后的最小值

删去k个数字后的最小值思路贪心算法JAVA实现1JAVA实现2给出一个整数&#xff0c;从该整数中去掉k个数字&#xff0c;要求剩下的数字形成的新整数尽可能小。应该如何选取被去掉的数字&#xff1f; 其中整数的长度大于或等于k&#xff0c;给出的整数的大小可以超过long类型的数字…

计算机毕业设计 基于HTML+CSS+JavaScript 大气的甜品奶茶美食餐饮文化网页设计与实现23页面

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

Java+SSM房屋租赁系统房屋出租房产(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下 后台框架&#xff1a;Spring、SpringMVC、MyBatis UI界面&#xff1a;jQuery 、JSP 数据库&#xff1a;MySQL 系统功能 系统分为前台用户界面和后台系统管理&#xff1a; 1.前台用户界面 用户注册、用户登录、用户中心、浏览房源、房源…

代码随想录训练营第54天|休息日 小结

打家劫舍系列 198. 打家劫舍对于当前的房间&#xff0c;无非就两种选择&#xff1a;偷与不偷。如果当前房间偷&#xff0c;那么前一个房间就不偷&#xff0c;即dp[i] dp[i-2] nums[i]&#xff1b;如果当前房间不偷&#xff0c;那么dp[i] dp[i-1]&#xff0c;因此递推公式为…

ch3_1_多进程的概念

1. CPU 的管理 CPU的工作原理&#xff1a; 从内存中取出程序的指令&#xff0c; 执行程序中的指令&#xff1b; 1.1 多道程序 假设A 程序运行时&#xff0c; 遇到 IO 处理时&#xff0c; 为了能够执行A 程序的后续指令&#xff0c; 正常情况下 cpu 需要等待着IO 处理完成&am…

后端快速学习VUE(一):VUE入门

个人博客地址 http://xiaohe-blog.top/ 文章目录1. 简介2. 基本使用2.1 引入Vue2.2 基本使用2.3 总结 &#xff1a;3. v-text、v-html指令的使用4. v-on : 事件绑定4.1 事件的三要素&#xff1a;4.2 v-on的基本使用4.3 v-on获取vue实例this4.4 事件绑定简化写法5. 常用指令5.1 …

useRef 源码解读

文章目录useRef 源码解读mountRefupdateRefref 的生命周期&#xff08;工作流程&#xff09;总结&#xff1a;render 阶段commit 阶段总述具体阐述safelyDetachRefcommitAttachRefuseRef 源码解读 由于 string 类型的 ref 已不推荐使用&#xff0c;所以只针对 function &#…

论文复现-1:bertscore

Bertscore是计算相似度的一种方法。 遗留问题&#xff1a;使用model layer 中的单一层 还是多个层&#xff0c;会对结果造成很大的影响吗&#xff1f; sent_encode函数是使用tokenizer将句子做encode。 tokenizer.encode( sent, add_special_tokensTrue, add_prefix_spaceTrue,…

HTML与CSS基础

2022.12.12 程序员在前端写完代码之后通过浏览器的渲染和解析成为用户看到的网页 浏览器出品的公司不同&#xff0c;内部的渲染引擎也不同。导致解析相同代码时的速度、性能、效果也不同 相同的前端网页在不同浏览器中运行的的结果也可能不同 WEB的三大标准 HTML包含页面内…

Java+MySQL基于SSM的智能办公管理系统

随着时代的发展,人们越来越来希望通过简单方便快捷的方式来进行办公,通过自能办公系统可以实现在线办公,这种办公模式脱离了传统纸质办公很多困扰,在实现现代化的同时提高了办公的效率。 本智能办公管理系统采用JAVA语言来进行开发,用小巧灵活的MySQL数据库做完后台存储解释。本…

痞子衡职场经验与感悟分享 - 索引

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。本系列痞子衡给大家分享的是职场经验与见闻感悟。 痞子衡在嵌入式行业也摸打滚爬了不少年&#xff0c;有一些个人经验可以给大家参考。所谓他山之石可以攻玉&#xff0c;希望痞子衡的经验对大家的职场之路有所帮…

jsp+ssm计算机毕业设计电影影评网【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…