Axios网络请求

news2024/11/20 2:46:20

Alt哈喽~大家好,这篇来看看Axios网络请求。

​文章推荐链接
SpringCloud Sentinel 使用SpringCloud Sentinel 使用
将Nacos注册到springboot使用以及Feign实现服务调用将Nacos注册到springboot使用以及Feign实现服务调用
微服务介绍与 SpringCloud Eureka微服务介绍与 SpringCloud Eureka

目录

  • 一、前言
    • 1、什么是Axios?
    • 2、Axios特性
  • 二、安装Axios
  • 三、Axios的用法
    • 1、发送GET请求
    • 2、发送POST请求
    • 3、async/await
    • 4、其他请求方式
  • 四、Axios与Vue整合
  • 五、跨域问题
    • 1、什么是跨域
    • 2、为什么会出现跨域问题?
    • 3、跨域问题解决
    • 4、前端代码
    • 5、后端代码讲解
    • 6、前端代码讲解
  • 六、拦截器

一、前言

1、什么是Axios?

在实际项目开发中,前端页面所需要的数据往往需要从服务器端获取,这必然涉及与服务器的通信。

Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。

Axios 在浏览器端使用XMLHttpRequests发送网络请求,并能自动完成JSON数据的转换 。

Axios 是一个基于 promise 的 HTTP 库,简单的讲就是可以发送get、post请求。说到get、post,大家应该第一时间想到的就是Jquery吧,毕竟前几年Jquery比较火的时候,大家都在用他。但是由于Vue、React等框架的出现,Jquery也不是那么吃香了。也正是Vue、React等框架的出现,促使了Axios轻量级库的出现,因为Vue等,不需要操作Dom,所以不需要引入Jquery.js了。官方网站

2、Axios特性

1、可以在浏览器中发送 XMLHttpRequests
2、可以在 node.js 发送 http 请求
3、支持 Promise API
4、拦截请求和响应
5、转换请求数据和响应数据
6、能够取消请求
7、自动转换 JSON 数据
8、客户端支持保护安全免受 XSRF 攻击

二、安装Axios

使用npm:

npm install axios

下载完了之后在package.json里面查看是否有axios的版本号,有就表示已经下载成功了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFtnC9wB-1675245894988)(C:\Users\小熊\AppData\Roaming\Typora\typora-user-images\image-20221104194956815.png)]

三、Axios的用法

1、发送GET请求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k92F2PkB-1675245894990)(C:\Users\小熊\AppData\Roaming\Typora\typora-user-images\image-20221104195313209.png)]

2、发送POST请求

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlH1xvwX-1675245894990)(C:\Users\小熊\AppData\Roaming\Typora\typora-user-images\image-20221104195330737.png)]

3、async/await

async和await是ES8引入的新语法,准确说来是异步函数实现的语法糖,使用async和await可以更加方便的进行异步操作

async 关键字用于函数上(async函数的返回值是Promise实例对象)

await 关键字用于 async 函数当中(await可以得到异步的结果)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0D4I08uA-1675245894991)(C:\Users\小熊\AppData\Roaming\Typora\typora-user-images\image-20221104195423579.png)]

4、其他请求方式

参考这里

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X9poF4g2-1675245894991)(C:\Users\小熊\AppData\Roaming\Typora\typora-user-images\image-20221104195523677.png)]

四、Axios与Vue整合

在实际项目开发中,几乎每个组件中都会用到 axios 发起数据请求。此时会遇到如下两个问题:

每个组件中都需要导入 axios

每次发请求都需要填写完整的请求路径

可以通过全局配置的方式解决上述问题

axios.defaults.baseURL = "http://localhost:8088"
Vue.prototype.$http = axios
Vue.config.productionTip = false

axios.defaults.baseURL 作用:如果axios发送的AJAX请求的URL不是完整路径的话,就拼接baseURL前缀

Vue.prototype. h t t p 作用: http 作用: http作用:http就在所有的Vue实例中可以用了

Vue.config.productionTip 作用:作用——阻止vue启动生产消息,阻止的内容如图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l7P8x3wb-1675245894992)(C:\Users\小熊\AppData\Roaming\Typora\typora-user-images\image-20221104200301930.png)]

五、跨域问题

1、什么是跨域

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。

2、为什么会出现跨域问题?

为了保证浏览器的安全,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,称为同源策略,同源策略是浏览器安全的基石

同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能
所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域,此时无法读取非同源网页的 Cookie,无法向非同源地址发送 AJAX 请求

3、跨域问题解决

CORS(Cross-Origin Resource Sharing)是由W3C制定的一种跨域资源共享技术标准,其目的就是为了解决前端的跨域请求。

CORS可以在不破坏即有规则的情况下,通过后端服务器实现CORS接口,从而实现跨域通信。

CORS将请求分为两类:简单请求和非简单请求,分别对跨域通信提供了支持。

在前端代码与后端代码连接时(前后端分离),常常因为跨域问题而连接不上,那么如何解决呢?

在 export default 里面使用created:function方法,代码如下

4、前端代码

    created:function(){
      var _this = this;
      axios.get("http://localhost:8088/user/findAll").then(function(response){
        _this.tableData = response.data;
        // console.log(response.data)
      })
      // this.$http.get("/user/findAll").then((response)=>{
      //   this.tableData = response.data;
      //   // console.log(response.data)
      // })
    },

5、后端代码讲解

在控制层加上 @CrossOrigin 注解 或者自定义配置类

package com.example.mpdemo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

// 使用了注解 @CrossOrigin,就可以不用 CorsConfig 配置类了
// @Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 允许跨域访问的路径
                .allowedOrigins("*") // 允许跨域访问的源
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求的方法
                .maxAge(16800) // 预间隔时间
                .allowedHeaders("*") // 允许头部设置
                .allowCredentials(true); // 是否发送 cookie
    }
}

这里就使用注解的方式

我们看看控制层

package com.example.mpdemo.controller;

import com.example.mpdemo.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class OrderController {

    @Autowired
    private OrderMapper orderMapper;

    @GetMapping("/order/findAll")
    public List findAll(){

        List orders = orderMapper.selectAllOrdersAndUser();
        return orders;
    }

}

调用OrderMapper的selectAllOrdersAndUser方法

OrderMapper代码

package com.example.mpdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mpdemo.entity.Order;
import com.example.mpdemo.entity.User;
import com.sun.org.apache.xpath.internal.operations.Or;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface OrderMapper extends BaseMapper<Order> {

    @Select("select * from t_order where uid = #{uid}")
    List<Order> selectByUid(int uid);

//  查询所有的订单,同时查询订单的用户
    @Select("select * from t_order")
    @Results({
            @Result(column = "id",property = "id"),
            @Result(column = "ordertime",property = "ordertime"),
            @Result(column = "total",property = "total"),
            @Result(column = "uid",property = "user",javaType = User.class,
                one=@One(select = "com.example.mpdemo.mapper.UserMapper.selectById")
            )
    })
    List<Order> selectAllOrdersAndUser();
}

数据库结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvNEpEkL-1675245894992)(C:\Users\小熊\AppData\Roaming\Typora\typora-user-images\image-20221104201213365.png)]

6、前端代码讲解

Hello.vue 代码

<template>
<div>
    <el-table
    :data="tableData"
    style="width: 100%"
    :row-class-name="tableRowClassName">
    <el-table-column
      prop="id"
      label="编号"
      width="180">
    </el-table-column>
    <el-table-column
      prop="username"
      label="姓名"
      width="180">
    </el-table-column>
    <el-table-column
      prop="password"
      label="密码"
      width="180">
    </el-table-column>
    <el-table-column
      prop="birthday"
      label="出生年月"
      width="180">
    </el-table-column>
  </el-table>
  <!-- <i class="fa fa-camera-retro fa-lg"></i> -->
</div>
</template>

<!-- props 自定义属性,可以在外部使用自定义的名称,不需要导入的方式来进行套娃 -->
<script>

// import axios from "axios";


export default {
    name: "Hello",
    data: function(){
        return {
        tableData: []
      }
    },
    created:function(){
      var _this = this;
      axios.get("http://localhost:8088/user/findAll").then(function(response){
        _this.tableData = response.data;
        // console.log(response.data)
      })
      // this.$http.get("/user/findAll").then((response)=>{
      //   this.tableData = response.data;
      //   // console.log(response.data)
      // })
    },
    methods: {
      tableRowClassName({row, rowIndex}) {
        if (rowIndex === 1) {
          return 'warning-row';
        } else if (rowIndex === 3) {
          return 'success-row';
        }
        return '';
      }
    }
}
</script>

<style>
  .el-table .warning-row {
    background: oldlace;
  }

  .el-table .success-row {
    background: #f0f9eb;
  }
</style>

就是发了个请求,将数据放到tableData里面并渲染到页面上。

效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AzZw1a8f-1675245894993)(C:\Users\小熊\AppData\Roaming\Typora\typora-user-images\image-20221104201517107.png)]

六、拦截器

在请求或响应被 then 或 catch 处理前拦截它们。

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  });

如果你稍后需要移除拦截器,可以这样:

const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
axios.interceptors.request.eject(myInterceptor);

可以给自定义的 axios 实例添加拦截器。

const instance = axios.create();
instance.interceptors.request.use(function () {/*...*/});

Alt

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

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

相关文章

Spark07: 宽窄依赖、Stage的划分

一、宽依赖和窄依赖 1. 窄依赖 窄依赖(Narrow Dependency)&#xff1a;指父RDD的每个分区只被子RDD的一个分区所使用&#xff0c;例如map、filter等这些算子。 一个RDD&#xff0c;对它的父RDD只有简单的一对一的关系&#xff0c;也就是说&#xff0c;RDD的每个partition仅仅…

Python分支循环规范:if elif for while

分支与循环 条件是分支与循环中最为核心的点&#xff0c; 解决的问题场景是不同的问题有不同的处理逻辑。 当满足单个或者多个条件或者不满足条件进入分支和循环&#xff0c; 这里也就说明这个对相同问题处理执行逻辑依据具体参数动态变化&#xff0c; 由此产生多种可能性&…

GAMES101笔记:辐射度量学(下)

Irradiance 定义&#xff1a;irradiance是单位面积上的power&#xff0c;这个单位面积是和入射光线垂直的方向上的单位面积。如果受光表面不垂直于光线&#xff0c;需要投影到垂直方向上进行计算&#xff08;cosθ\thetaθ&#xff09;。 Irradiance Falloff 光的Intensity…

零入门容器云网络实战-8->veth pair设备介绍

在介绍veth pair之间&#xff0c;先看一下下面的图&#xff0c; 这类东西有没有见过&#xff1f; 如果没有见过&#xff0c;赶紧看看你方圆10米之内有没有&#xff1f; 这就是网线&#xff0c;最明显的特征是有两端!即&#xff0c;两个水晶头 一端可以链接普通的电脑&#…

【技术调研】关于仪表盘转图片推送钉钉的技术方案调研

方案1—纯后端实现 后端写定时任务&#xff0c;定时启动查询服务。查询出数据集结果&#xff0c;拼接成Table样式&#xff0c;再转换成图片。推送至钉钉。 优点&#xff1a;只需要后端开发&#xff0c;不涉及前端。 缺点&#xff1a;太定制化&#xff0c;不通用&#xff0c;样…

Dart语法学习-数据类型

一、Dart 语言对以下类型具有支持 Numbers (int, double) Strings (String) Booleans (bool) Lists (List, also known as arrays) Sets (Set) Maps (Map) Runes (Runes; often replaced by the characters API) Symbols (Symbol) The value null (Null) Dart 要求以 main 函数…

正大国际期货:什么是黄金保证金交易?黄金保证金交易包含哪些要点?

黄金保证金交易是指在黄金买卖业务中&#xff0c;市场参与者不需对所交易的黄金进行全额资金划拨&#xff0c;只需按照黄金交易总额支付一定比例的价款&#xff0c;作为黄金实物交收时的履约保证。黄金保证金交易根据类型不同&#xff0c;主要分为期货黄金保证金交易和现货黄金…

visual studio 调试增强,实现一行代码打印调用栈

如何主动打印调用栈&#xff1f;如果是Java、Js&#xff0c;那么很简单&#xff0c;三行就能实现。但 VisualStudio 就复杂多了。如果不下断点&#xff0c;那么只能在崩溃的时候被动查看。 而使用 Backward-Cpp &#xff0c;只需在项目中拖入一个hpp文件&#xff0c;就可以主动…

[Android]ProgressBar进度条

ProgressBar ProgressBar是进度条控件&#xff0c;ProgressBar的应用场景很多&#xff0c;比如用户登录时&#xff0c;后台发送请求&#xff0c;以及进行等待服务器返回信息等一些比较耗时的操作。这个时候如果没有提示&#xff0c;用户可能会以为程序崩溃了或手机死机了&#…

【数据结构】1.2 数据结构的基本概念和术语

文章目录1. 数据、数据元素、数据项和数据对象2. 数据结构逻辑结构的种类存储结构的种类3. 数据类型和抽象数据类型数据类型抽象数据类型概念小结1. 数据、数据元素、数据项和数据对象 数据&#xff08;Data&#xff09; 能输入计算机且能被计算机处理的各种符号的集合。 信息…

AcWing1074. 二叉苹果树(树形DP +分组背包)

AcWing1074. 二叉苹果树&#xff08;树形DP 分组背包&#xff09;一、问题二、分析1、状态表示2、状态转移3、循环设计三、代码一、问题 二、分析 这道题是一个在数上做分组背包问题的模型&#xff0c;那么为什么是分组背包呢&#xff1f;作者在之前的文章中进行过详细地讲解&…

VUE2常用知识

1、Vue的基本原理 【】当一个Vue实例创建时&#xff0c;Vue会遍历data中的属性&#xff0c;用 Object.defineProperty&#xff08;vue3.0使用proxy &#xff09;将它们转为 getter/setter&#xff0c;并且在内部追踪相关依赖&#xff0c;在属性被访问和修改时通知变化。 每个组…

工时管理:按工作时间还是完成的任务来跟踪员工的生产力?

据中国社科院的一项调查显示&#xff1a;我国有86%的职场人都患有拖延症&#xff1b;50%的人不到最后一刻绝不开始工作&#xff1b;13%的人没有人催不能完成工作。 拖延症对小型或成长型企业的影响是很大的&#xff0c;毕竟&#xff0c;任务永远不会因为逃避或简单地坐在那里而…

【Linux】信号保存、信号处理、可重入函数、volatile关键字、SIGCHLD信号

目录 一、信号保存 1.1 信号相关的概念名词 1.2 在内核中的表示 1.3 sigset_t与操作函数 1.4 信号设定 二、信号处理 2.1 内核空间与用户空间 2.2 内核态和用户态 2.3 信号的捕捉流程 2.4 sigaction 函数 三、可重入函数 四、volatile 五、SIGCHLD信号 一、信号保…

当今主流的网络服务应用

文件传输协议 主机之间传输文件是IP网络的一个重要功能&#xff0c;如今人们可以方便地使用网页、邮箱进行文件传输。 然而在互联网早期&#xff0c;Web&#xff08;World Wide Web&#xff0c;万维网&#xff09;还未出现&#xff0c;操作系统使用命令行的时代&#xff0c;…

webpack前端应用之基础打包

目录 前言&#xff1a;初识 Webpack 5 一、前端工程化 1、webpack ​ &#xff08;2&#xff09;主要功能&#xff1a; 2、webpack的使用&#xff1a;配置文件所需要的信息&#xff08;五大配置属性&#xff09; 3、示例 强调&#xff1a; 4、webpack中使用的loader 二…

【Java基础】003 -- Java基础概念(计算机的存储规则)

目录 计算机的存储规则 1、什么是二进制&#xff1f; 2、为什么计算机要使用二进制存储数据&#xff1f; 3、进制之间可以转换吗&#xff1f; 4、码表&#xff08;Text文本&#xff09; 5、图片数据 6、声音数据 计算机的存储规则 在计算机中&#xff0c;任意的数据都是…

java集成RSA非对称加密数据传输

使用场景: 前端请求后端接口时如:登录接口,这时候需要传账号密码到后端接口请求这样就会暴露请求的数据。RSA非对称加密分公钥和私钥,公钥将数据进行加密,私钥对加密的数据进行解密 (当然前端最好是封装一下不要暴露出来公钥) 代码实现: 1、RSA工具类(或访问http:…

大数据舆情监控应用平台,TOOM大数据舆情监控系统的作用

大数据舆情监控应用是利用大数据技术对社会舆情的收集、分析、挖掘和展示的工具。它通常会收集和分析各种社交媒体、新闻媒体、博客等信息&#xff0c;以了解舆情动态和趋势。大数据舆情监控应用可以帮助企业和政府了解市场和社会动态&#xff0c;为决策提供支持。然而&#xf…

聚观早报 |比亚迪预计去年营收超4200亿元;美股三大指数集体收跌

今日要闻&#xff1a;比亚迪预计去年营收超 4200 亿元&#xff1b;美股三大指数集体收跌&#xff1b;王凤英正式加入小鹏汽车出任总裁&#xff1b;苹果计划在印度生产 25% 的 iPhone 手机&#xff1b;LVMH老板放狠话坚决打击代购行为比亚迪预计去年营收超 4200 亿元 1 月 30 日…