当前位置: 首页 > news >正文

【Java Web】Axios实现前后端数据异步交互

目录

一、Promise概述

二、Promise基本用法

三、async和await关键字

四、Axios介绍

4.1 Axios基本用法

4.2 Axios简化用法之get和post方法

五、Axios拦截器

六、跨域问题处理


一、Promise概述

axios是代替原生的ajax实现前后端数据交互的一套新解决方案,而axios使用的是promise相关的语法,而Promise主要是解决函数回调的问题。

普通函数: 普通函数被调用时只有函数执行完毕后才会执行后续的代码。

回调函数:就是在一个函数体里面去调用另一个函数。回调函数的执行通常依托于事件的驱动,当事件发生后才会自动执行的函数。回调函数之外的代码不会等到回调函数执行完毕之后才会执行。

所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。

Promise特点:

(1)Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。

(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。

二、Promise基本用法

Promise对象回调函数两个形参(形参名任意)

  • resolve形参1:当在Promise对象的回调函数体中调用resolve()方法时,则表示Promise对象由Pending进行中状态转化为了Resolved已完成状态。此时浏览器就会自动调用Promise.then()方法中的首个形参回调函数。

  • reject形参2:当Promise对象的回调函数体中调用第二个形参reject()方法时,则表示Promise对象由Pending进行状态转换为了Rejectd已失败状态。此时浏览器会自动调用Promise.then()方法中的第二个形参回调函数。

说明: Promise.then()方法的返回对象调用其catch(回调函数)方法时,当Promise对象由进行状态转化为已失败状态(调用reject())

或Promise对象回调函数体异常报错,则会自动触发catch方法中回调函数的执行。

三、async和await关键字

async:

使用async关键字标注的方法可以将一个普通函数转化为一个异步函数即Promise对象的回调函数,从而帮助我们使用简洁的语法快速获得一个promise对象。

1、async关键字标注的函数返回值就是一个promise对象

2、async异步函数若能正常返回结果,则Promise对象就是一个成功状态,返回值就是成功状态的返回值。

3、async异步函数中出现了异常,此时返回的promise对象就是一个失败状态。

4、async异步函数返回的如果是一个Promise对象,则Promise对象的状态由async关键字标注的内部promise

状态所决定。

await:

使用await关键字可以帮助我们快捷的获取Promise成功状态的返回值。

1、await关键字修饰的若是一普通值则直接返回普通值、若修饰的是一个Promise对象则返回其成功状态的返回值。

2、await关键字修饰的若是一个失败状态的Promise则会直接抛异常。

3、await关键字只能出现在由async修饰的异步函数中使用,但异步函数中可以没有await关键字。

4、只有await关键字修饰的代码执行完毕后,其所在的方法中后面的代码才会执行;异步函数之外的其它代码则不会等待await修饰的代码执行完后再执行。

四、Axios介绍

传统方式前端向后端发送异步请求需要使用原生的Ajax代码实现。此种方式代码比较繁琐而Axios就是将原生的Ajax的功能封装API方法,前端向后端发送数据时只需要调用Axios对象相关的API即可,极大的简化了代码,使用方便。

4.1 Axios基本用法

步骤:

  1. 使用npm install axios安装Axios框架。
  2. 从axios框架中默认导入axios对象。
  3. 调用axios方法,向后端发送请求。
  4. 使用axios返回的promise对象并调用then()方法,来接收axios方法成功发送请求后,服务端返回的response响应对象。

4.2 Axios简化用法之get和post方法

  • axios.get()请求方法:

  • axios.post()请求方法:

五、Axios拦截器

如果axios向后端发送的是一个正常的请求,则请求在到达后端服务器之前会先经过请求拦截器的方法1进行处理,处理过后再将请求报文返回放行给后端服务器。若axios发送的是一个错误、异常的请求,请求拦截器方法2执行处理后,会直接响应给axios请求方法一个失败的Promise对象。

后端服务器在处理正常的请求后,响应报文在返回给axios发送请求的调用函数之前会先经过响应拦截器,如果后端响应的是正常的报文则由响应拦截器的方法1处理响应报文后,将其返回给axios请求方法;若是异常的响应报文则由响应拦截器的方法2处理后,返回给axios请求方法。

六、跨域问题处理

在前后端分离开发环境中,前端视图会单独部署到一台服务器上而后端工程也会单独部署到另台服务器中。当前端视图需要通过axios异步请求向另台服务器的后端请求数据时,此时用户浏览器就会面临着跨域的问题。所谓跨域就是用户浏览器访问的页面来自于前端服务器,而页面异步请求目标地址则是另一台的后端服务器的url与用户浏览器当前地址栏访问的目标服务器不是同一个服务。此时当用户向另台后端服务器发送异步请求数据时,由于涉及到跨域的问题,浏览器就会认为此次用户异步请求响应回来的数据是不安全的、导致axios异步请求失败。

解决方案:

浏览器在正式向后端服务器发送异步请求数据之前,其实会先向后端服务器发送一个option方式的预检请求、询问跨域异步请求的数据是否安全。此时,我们就可以在后端服务工程上创建个跨域处理的过滤器,对用户发送过来的请求进行过滤。若用户发送的是一个预检请求(请求方式是option),则直接响应给用户浏览器一个200状态码的响应报文,并设置允许浏览器跨域的相关响应头。这样浏览器在向后端服务器发送axios异步请求之前、由于之前的预检请求后端服务器告诉其浏览器可以进行跨域访问且异步请求的数据是安全的。这样用户浏览器就可以跨域向后端服务器发送请求获取到响应信息并渲染到标签页。

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

相关文章:

【Java Web】Axios实现前后端数据异步交互

目录 一、Promise概述 二、Promise基本用法 三、async和await关键字 四、Axios介绍 4.1 Axios基本用法 4.2 Axios简化用法之get和post方法 五、Axios拦截器 六、跨域问题处理 一、Promise概述 axios是代替原生的ajax实现前后端数据交互的一套新解决方案,而…...

React 第十七节 useMemo用法详解

概述 useMemo 是React 中的一个HOOK,用于根据依赖在每次渲染时候缓存计算结果; 大白话就是,只有依赖项发生变化时候,才会重新渲染为新计算的值,否则就还是取原来的值,有点类似 vue 中的 computed 计算属性…...

鸿蒙项目云捐助第十五讲云数据库的初步使用

鸿蒙项目云捐助第十五讲云数据库的初步使用 在华为云技术使用中,前面使用了云函数,接下来看一下华为云技术中的另外一个技术云数据库的使用。 一、云数据库的创建 这里使用华为云数据库也需要登录到AppGallery Connect平台中,点击进入到之…...

如何构建一个可信的联邦RAG系统。

今天给大家分享一篇论文。 题目是:C-RAG:如何构建一个可信的联邦检索RAG系统。 论文链接:https://arxiv.org/abs/2412.13163 论文概述 尽管大型语言模型 (LLM) 在各种应用中展现出令人印象深刻的能力,但它们仍然存在可信度问题&#xff…...

【深度学习之三】FPN与PAN网络详解

FPN与PAN:深度学习中的特征金字塔网络与路径聚合网络 在深度学习的领域里,特征金字塔网络(Feature Pyramid Networks,简称FPN) 和 路径聚合网络(Path Aggregation Network,简称PAN)…...

Qt学习笔记第71到80讲

第71讲 事件过滤器的方式实现滚轮按键放大 事件体系(事件派发 -> 事件过滤->事件分发->事件处理)中,程序员主要操作的是事件分发与事件处理。我们之前已经通过继承QTextEdit来重写事件实现Ctrl加滚轮的检测,还有一种处理…...

以管理员身份运行

同时按下Ctrl Shift Esc键打开任务管理器,在任务管理器的左上角,点击“文件”菜单,在下拉菜单中选择“新建任务” 在弹出的对话框中,输入您想要运行的程序的名称。如果您不确定程序的确切名称,可以点击“浏览”来找到…...

用 Python 实现井字棋游戏

一、引言 井字棋(Tic-Tac-Toe)是一款经典的两人棋类游戏。在这个游戏中,玩家轮流在 3x3 的棋盘上放置自己的标记,通常是 “X” 和 “O”,第一个在棋盘上连成一线(横、竖或斜)的玩家即为获胜者。…...

06 实现自定义AXI DMA驱动

为什么要实现自定义AXI DMA驱动 ZYNQ 的 AXI DMA 在 Direct Register DMA (即 Simple DMA)模式下可以通过 AXIS 总线的 tlast 提前结束传输,同时还可以在 BUFFLEN 寄存器中读取到实际传输的字节数,但是通过 Linux 的 DMA 驱动框架…...

SpringBoot集成ENC对配置文件进行加密

在线MD5生成工具 配置文件加密&#xff0c;集成ENC 引入POM依赖 <!-- ENC配置文件加密 --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>2.1.2</ver…...

初学stm32 ——— 串口通信

目录 STM32的串口通信接口 UART异步通信方式特点&#xff1a; 串口通信过程 STM32串口异步通信需要定义的参数: USART框图&#xff1a; 常用的串口相关寄存器 串口操作相关库函数 ​编辑 串口配置的一般步骤 STM32的串口通信接口 UART&#xff1a;通用异步收发器USART&am…...

qwt 多Y轴 项目效果

项目场景&#xff1a; 在做一个半导体上位机软件项目实践中&#xff0c;需要做一个曲线展示和分析界面&#xff0c;上位机主题是用qt框架来开发&#xff0c;考虑到目前qt框架的两种图标库&#xff0c;一个是qcustomplot 一个是 qwt。之所以采用qwt &#xff0c;根本原因是因为…...

Java中通过ArrayList扩展数组

在Java中&#xff0c;ArrayList 是一个动态数组实现&#xff0c;能够根据需要自动调整其大小。与传统的数组不同&#xff0c;ArrayList 不需要预先指定大小&#xff0c;并且提供了许多方便的方法来操作集合中的元素。下面将详细介绍如何使用 ArrayList 进行数组的扩展&#xff…...

Java:链接redis报错:NoSuchElementException: Unable to validate object

目录 前言报错信息排查1、确认redis密码设置是否有效2、确认程序配置文件&#xff0c;是否配置了正确的redis登录密码3、检测是否是redis持久化的问题4、确认程序读取到的redis密码没有乱码 原因解决 前言 一个已经上线的项目&#xff0c;生产环境的redis居然没有设置密码&…...

datasets库之load_dataset

目录 问题解决方案 问题 使用peft用lora微调blip2时用到了一个足球数据集&#xff0c;如下&#xff1a; 原始代码如下 dataset load_dataset("ybelkada/football-dataset", split"train")然而这需要梯子才能下载&#xff0c;服务器较难用VPN所以使用au…...

React Router常见面试题目

1. React Router 支持哪几种模式? React Router 支持以下两种主要模式&#xff1a; BrowserRouter (基于 HTML5 History API 的模式) 原理&#xff1a; 利用 history.pushState 和 history.replaceState 操作浏览器历史栈&#xff0c;无需重新加载页面。URL 看起来像传统 URL…...

sequelize-cli 封装登录接口

node ORM &#xff08;sequelize&#xff09;使用、查询、验证及express 基础框架的搭建及实例的使用 一、思路 第一步&#xff1a;肯定是用户要向接口传递邮箱、账号和密码了。 第二步&#xff1a;接口这边&#xff0c;先要验证。因为这里不是往数据库里存储数据&#xff0c;…...

使用 Elasticsearch 查询和数据同步的实现方法

在开发过程中&#xff0c;将数据从数据库同步到 Elasticsearch (ES) 是常见的需求之一。本文将重点介绍如何通过 Python 脚本将数据库中的数据插入或更新到 Elasticsearch&#xff0c;并基于多字段的唯一性来判断是否执行插入或更新操作。此外&#xff0c;我们还将深入探讨如何…...

QTday1作业设置简易登录界面

代码 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//创建一个标签QLabel *lab1 new QLabel(this);//重新设置大小lab1->resize(1925,1080);//用动图类QMovie实例化一个动图QMovie *mv new QMovie("C:\\Users\\MR\\Deskto…...

RC低通滤波器和LR低通滤波器,LC低通滤波器该怎么选择

这是RC低通滤波器利用电容两端的电压不能突变可以滤除高频噪声 这是LR低通滤波器利用流过电感的电流不能突变也可以滤除高频噪声 那么问题来了两个低通滤波器&#xff0c;该怎么选择呢还是随便选一个就好&#xff1f; RC电路&#xff1a;因为电流电阻会发热耗能&#xff0c;所…...

绿色AI能耗优化:从模型架构到MLOps实践

1. 绿色AI能耗研究的现实意义在深度学习模型参数量呈指数级增长的今天&#xff0c;AI系统的能源消耗已成为不可忽视的环境负担。根据最新研究&#xff0c;训练一个大型语言模型的碳排放量相当于五辆汽车整个生命周期的排放总量。这种惊人的能源消耗与全球减碳目标形成了尖锐矛盾…...

Midjourney极简艺术风格实战手册(2024V6.2最新适配版):含17个已验证失效词黑名单与8组高通过率--sref权重组合

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney极简艺术风格的核心定义与美学边界 极简艺术风格在 Midjourney 中并非单纯减少元素&#xff0c;而是通过语义压缩、形式提纯与负空间策略构建高度凝练的视觉语言。其核心在于以最少的视觉单元…...

Linux系统信息查询全攻略:从内核到发行版的深度解析与脚本实践

1. 项目概述&#xff1a;一个看似简单却暗藏玄机的基础操作“查看Linux系统版本”&#xff0c;这几乎是每个运维工程师、开发人员乃至普通用户在接触Linux系统时&#xff0c;第一个需要掌握的命令。它简单到常常被新手教程一笔带过&#xff0c;却又复杂到足以让老手在排查问题时…...

【BK3633】从规格书到实战:解锁蓝牙5.2双模芯片的十大核心应用场景

1. BK3633芯片核心特性解析 第一次拿到BK3633规格书时&#xff0c;我被它的参数惊艳到了——这简直是为物联网设备量身定制的瑞士军刀。作为博通集成推出的蓝牙5.2双模芯片&#xff0c;它完美兼顾了高性能与低功耗这对"冤家"。实测下来&#xff0c;全速运行电流仅5mA…...

Windows终极优化神器:三分钟让Windows焕然一新

Windows终极优化神器&#xff1a;三分钟让Windows焕然一新 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否厌倦了每次重装系统后繁琐的…...

基于LangChain与Streamlit构建智能论文阅读助手:从原理到实践

1. 项目概述&#xff1a;一个为学术阅读而生的智能助手 如果你也经常被海量的学术论文淹没&#xff0c;或者对着PDF里复杂的公式和图表感到头疼&#xff0c;那么“talkingwallace/ChatGPT-Paper-Reader”这个项目&#xff0c;很可能就是你一直在寻找的“神兵利器”。这不仅仅是…...

WeatherBench终极指南:快速构建天气预报AI模型的完整基准平台

WeatherBench终极指南&#xff1a;快速构建天气预报AI模型的完整基准平台 【免费下载链接】WeatherBench A benchmark dataset for data-driven weather forecasting 项目地址: https://gitcode.com/gh_mirrors/we/WeatherBench WeatherBench是一个专为数据驱动天气预报…...

Horos:免费开源医学影像软件,3D医疗图像处理的终极指南

Horos&#xff1a;免费开源医学影像软件&#xff0c;3D医疗图像处理的终极指南 【免费下载链接】horos Horos™ is a free, open source medical image viewer. The goal of the Horos Project is to develop a fully functional, 64-bit medical image viewer for OS X. Horos…...

双边滤波Bilateral_Filter(调参的重要性)

一、双边滤波的基本概念 1.双边滤波是一种非线性滤波 2.双边滤波的作用是保边降噪平滑滤波器 3.卷积核大小&#xff1a;33、55、77这个是比较常用的卷积核。二、双边滤波的关键参数 1.空间方差 用用控制空间位置差异的平滑程度。 空间方差越大&#xff0c;空间高斯的影响范围越…...

现代C++中的编译期反射替代思路

现代C中的编译期反射替代思路C 长期缺乏完整标准反射能力&#xff0c;但工程上依然经常需要“遍历字段、生成元信息、自动序列化、自动注册”。在正式反射广泛可用之前&#xff0c;开发者通常通过宏、模板特化、tuple 适配和代码生成等方式实现替代方案。一种常见思路是手工提供…...