后端工程师快速使用axios

文章目录

    • 01.AJAX 概念和 axios 使用
      • 模板
      • 目标
      • 讲解
      • 代码解析
      • 案例
        • 前端
        • 后端
        • 结果截图
    • 02.URL 查询参数
      • 模板
      • 目标
      • 讲解
      • 案例
        • 前端
        • 后端
        • 结果截图
    • 03.常用请求方法和数据提交
      • 模板
      • 目标
      • 讲解
      • 案例
        • 前端
        • 后端
        • 结果截图
    • 04.axios 错误处理
      • 模板
      • 目标
      • 讲解
      • 案例
        • 前端
        • 后端
        • 结果截图

01.AJAX 概念和 axios 使用

模板

axios({
  url: '目标资源地址'
}).then((result) => {
  // 对服务器返回的数据做后续处理
})

注:url中的地址可以直接使用相对路径,不必写完整的IP或域名

例如:

url: ‘localhost:8080/test3’ 可以写成 url: ‘/test3’

目标

了解 AJAX 概念并掌握 axios 库基本使用

讲解

  1. 什么是 AJAX ? mdn

    • 使用浏览器的 XMLHttpRequest 对象 与服务器通信

    • 浏览器网页中,使用 AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿到数据数组以后,展示到网页

      image-20230403173156484

  2. 什么是服务器?

    • 可以暂时理解为提供数据的一台电脑
  3. 为何学 AJAX ?

    • 以前我们的数据都是写在代码里固定的, 无法随时变化
    • 现在我们的数据可以从服务器上进行获取,让数据变活
  4. 怎么学 AJAX ?

    • 这里使用一个第三方库叫 axios, 后续在学习 XMLHttpRequest 对象了解 AJAX 底层原理
    • 因为 axios 库语法简单,让我们有更多精力关注在与服务器通信上,而且后续 Vue,React 学习中,也使用 axios 库与服务器通信
  5. 需求:从服务器获取省份列表数据,展示到页面上(体验 axios 语法的使用)

    获取省份列表数据 - 目标资源地址:http://hmajax.itheima.net/api/province

    • 完成效果:

      image-20230220113157010

  6. 接下来讲解 axios 语法,步骤:

  7. 引入 axios.js 文件到自己的网页中

    axios.js文件链接: https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js

  8. 明确axios函数的使用语法

    注意:请求的 url 地址, 就是标记资源的网址

    注意:then 方法这里先体验使用,由来后续会讲到

  9. 对应代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>AJAX概念和axios使用</title>
</head>

<body>
  <!--
    axios库地址:https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js
    省份数据地址:http://hmajax.itheima.net/api/province

    目标: 使用axios库, 获取省份列表数据, 展示到页面上
    1. 引入axios库
  -->
  <p class="my-p"></p>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    // 2. 使用axios函数
    axios({
      url: 'http://hmajax.itheima.net/api/province'
    }).then(result => {
      console.log(result)
      // 好习惯:多打印,确认属性名
      console.log(result.data.list)
      console.log(result.data.list.join('<br>'))
      // 把准备好省份列表,插入到页面
      document.querySelector('.my-p').innerHTML = result.data.list.join('<br>') 
    })
  </script>
</body>

</html>

代码解析

  1. document.querySelector('.my-p'): 这一部分使用了 querySelector 方法来获取文档中具有 classmy-p 的第一个元素。querySelector 方法返回匹配到的第一个元素,如果没有找到匹配的元素,则返回 null
  2. .innerHTML: 这是一个 DOM 元素的属性,用于获取或设置元素的 HTML 内容。在这里,它被用于设置元素的 HTML 内容。
  3. result.data.list.join('<br>'): 这部分使用了 join 方法,将 result.data.list 数组中的每个元素用 <br> 连接起来成为一个字符串。join 方法会将数组的元素以指定的分隔符连接起来。在这里,分隔符是 <br>,表示换行。

案例

前端
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
    axios({
        url: 'http://localhost:8080/test'
    }).then(result => {
        console.log(result)
        console.log(result.data.data)
        console.log(result.data.data.join('<br>'))
        // document.querySelector('.my-p').innerHTML=result.data.list.join('<br>')
        var divs = document.getElementsByClassName('my-p');
        var div1=divs[0];

        div1.innerHTML=result.data.data.join('<br>')
    });
</script>
<p class="my-p"></p>
</body>
</html>
后端
package nuage.controller;

import nuage.common.R;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping
public class TestController {

    @GetMapping("/test")
    public R<List<String>> test() {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        return R.success(list);
    }
}

结果截图

image-20240315111242951

02.URL 查询参数

模板

axios({
  url: '目标资源地址',
  params: {
    参数名:}
}).then(result => {
  // 对服务器返回的数据做后续处理
})

目标

掌握-通过URL传递查询参数,获取匹配的数据

讲解

  1. 什么是查询参数 ?

    • 携带给服务器额外信息,让服务器返回我想要的某一部分数据而不是全部数据

    • 举例:查询河北省下属的城市列表,需要先把河北省传递给服务器

      image-20230404101257205

  2. 查询参数的语法 ?

    • 在 url 网址后面用?拼接格式:http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2
    • 参数名一般是后端规定的,值前端看情况传递即可
  3. axios 如何携带查询参数?

    • 使用 params 选项即可

      查询城市列表的 url地址:http://hmajax.itheima.net/api/city

      参数名:pname (值要携带省份名字)

  4. 需求:获取“河北省”下属的城市列表,展示到页面,对应代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>查询参数</title>
    </head>
    <body>
      <!-- 
        城市列表: http://hmajax.itheima.net/api/city
        参数名: pname
        值: 省份名字
      -->
      <p></p>
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
      <script>
        axios({
          url: 'http://hmajax.itheima.net/api/city',
          // 查询参数
          params: {
            pname: '辽宁省'
          }
        }).then(result => {
          console.log(result.data.list)
          document.querySelector('p').innerHTML = result.data.list.join('<br>')
        })
      </script>
    </body>
    </html>
    

案例

前端
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>

    axios({
        url: 'http://localhost:8080/test2',
        params: {
            name: '河北省'
        }
    }).then(result => {
        console.log(result);
        var list = document.getElementsByClassName("my-p");
        var list1 = list[0];
        list1.innerHTML=result.data.data.join('<br>')
    });

</script>
<p class="my-p"></p>
</body>
</html>
后端
package nuage.controller;

import nuage.common.R;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping
public class TestController {

    @GetMapping("/test2")
    public R<List<String>> test2(String name) {
        List<String> list = new ArrayList<>();
        list.add(name);
        list.add("a");
        list.add("b");
        list.add("c");
        return R.success(list);
    }
}

结果截图

image-20240315111750353

03.常用请求方法和数据提交

模板

axios({
  url: '目标资源地址',
  method: '请求方法',
  data: {
    参数名:}
}).then(result => {
  // 对服务器返回的数据做后续处理
})

目标

掌握如何向服务器提交数据,而不单单是获取数据

讲解

  1. 想要提交数据,先来了解什么是请求方法

    • 请求方法是一些固定单词的英文,例如:GET,POST,PUT,DELETE,PATCH(这些都是http协议规定的),每个单词对应一种对服务器资源要执行的操作

    • 前面我们获取数据其实用的就是GET请求方法,但是axios内部设置了默认请求方法就是GET,我们就没有写

    • 但是提交数据需要使用POST请求方法

      请求方法操作
      GET获取数据
      POST数据提交
      PUT修改数据(全部)
      DELETE删除数据
      PATCH修改数据(部分)
  2. 什么时候进行数据提交呢?

    • 例如:多端要查看同一份订单数据,或者使用同一个账号进行登录,那订单/用户名+密码,就需要保存在服务器上,随时随地进行访问

      image-20230404104328384

      image-20230404104333584

    3.需求:注册账号,提交用户名和密码到服务器保存

    注册用户 URL 网址:http://hmajax.itheima.net/api/register

    请求方法:POST

    参数名:

    username:用户名(要求中英文和数字组成,最少8位)

    password:密码(最少6位)

    image-20230404104350387

    4.正确代码如下:

    /*
      注册用户:http://hmajax.itheima.net/api/register
      请求方法:POST
      参数名:
        username:用户名(中英文和数字组成,最少8位)
        password:密码  (最少6位)
    
      目标:点击按钮,通过axios提交用户和密码,完成注册
    */
    document.querySelector('.btn').addEventListener('click', () => {
      axios({
        url: 'http://hmajax.itheima.net/api/register',
        method: 'POST',
        data: {
          username: 'itheima007',
          password: '7654321'
        }
      })
    })
    

    注:PUT和DELETE与POST类似,只需要将method改为PUT或DELETE即可

    实现路径参数,只需要在url后面拼接字符串即可,如:url: '/user/delet/' + row.id,row.id根据上下文查询

案例

前端
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>常用请求方法和数据提交</title>
</head>

<body>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>

    function dianji() {
      // console.log(123)
      var username = document.getElementsByClassName("username")[0].value;
      var password = document.getElementsByClassName("password")[0].value;
      console.log(username);
      axios({
        url: 'http://localhost:8080/test3',
        method: 'POST',
        data: {
          username: username,
          password: password
        }
      }).then(result=>{
        console.log(result.data);
        alert(result.data.data)
      })
    }


  </script>
用户名:<input class="username" type="text" >
  <br>
密码:<input class="password" type="password">
  <br>
<button class="bt" onclick="dianji()">注册</button>
</body>

</html>
后端
package nuage.controller;

import nuage.common.R;
import nuage.entity.User;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping
public class TestController {

    @PostMapping("/test3")
    public R<String> test3(@RequestBody User user) {
        System.out.println(user);
        return R.success("注册成功");
    }
}

package nuage.entity;

public class User {
    private String username;
    private String password;
	//get和set方法自己补充
}

结果截图

image-20240315164558128

04.axios 错误处理

模板

axios({
  // ...请求选项
}).then(result => {
  // 处理成功数据
}).catch(error => {
  // 处理失败错误
})

目标

掌握接收 axios 响应错误信息的处理语法

讲解

  1. 如果注册相同的用户名,则会遇到注册失败的请求,也就是 axios 请求响应失败了,你会在控制台看到如图的错误:

    image-20230220131753051

  2. 在 axios 语法中要如何处理呢?

    • 因为,普通用户不会去控制台里看错误信息,我们要编写代码拿到错误并展示给用户在页面上
  3. 需求:再次重复注册相同用户名,提示用户注册失败的原因

    image-20230404104440224

    image-20230404104447501

  4. 对应代码

    document.querySelector('.btn').addEventListener('click', () => {
        axios({
          url: 'http://hmajax.itheima.net/api/register',
          method: 'post',
          data: {
            username: 'itheima007',
            password: '7654321'
          }
        }).then(result => {
          // 成功
          console.log(result)
        }).catch(error => {
          // 失败
          // 处理错误信息
          console.log(error)
          console.log(error.response.data.message)
          alert(error.response.data.message)
        })
    })
    

案例

因为项目中我们的错误信息也是返回正确的状态码,所以不能写在.catch中,我们可以根据后端传过来的code来进行判断

前端
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>常用请求方法和数据提交</title>
</head>

<body>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>

    function dianji() {
      // console.log(123)
      var username = document.getElementsByClassName("username")[0].value;
      var password = document.getElementsByClassName("password")[0].value;
      console.log(username);
      axios({
        url: 'http://localhost:8080/test3',
        method: 'POST',
        data: {
          username: username,
          password: password
        }
      }).then(result => {

        if (result.data.code === 1) {
          console.log(result);
          alert(result.data.data)
        }else if (result.data.code === 0) {
          console.log(result);
          alert(result.data.msg)
        }
      }).catch(error => {

      });
    }


  </script>
用户名:<input class="username" type="text" >
  <br>
密码:<input class="password" type="password">
  <br>
<button class="bt" onclick="dianji()">注册</button>
</body>

</html>
后端
package nuage.controller;

import nuage.common.R;
import nuage.entity.User;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping
public class TestController {

    @PostMapping("/test3")
    public R<String> test3(@RequestBody User user) {
        if (user.getUsername().equals("nuage")) {
            return R.error("注册失败");
        }
        System.out.println(user);
        return R.success("注册成功");
    }
}

结果截图

image-20240315173307346

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

旅游管理系统|基于SpringBoot+ Mysql+Java+Tomcat技术的旅游管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 用户功能 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 …

数据的响应式:实现动态数据驱动的技巧

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

弗洛伊德-华沙算法求任意两点之间的最短路径算法

对于弗洛伊德-华沙算法首先是要假设研究的图中是不包含有负边的&#xff0c;对于所给的图中的任意亮点v1&#xff0c;vm&#xff0c;假设两点之间存在一条连通路径&#xff0c;对于该路径中去掉头和尾节点&#xff0c;也就是v1&#xff0c;vm&#xff0c;剩下的节点也就称之为这…

【嵌入式学习收徒,高薪offer等你来!!!】

有粉丝问了一个问题&#xff0c;说他今年要毕业了&#xff0c;投了好多简历都石沉大海&#xff0c;感觉好多公司都不招人了&#xff0c;想问一下现在究竟是不是如此&#xff0c;不清楚我当年毕业的时候是怎么样的。 我先不直接回答这个问题&#xff0c;先来看一组数据&#xf…

Windows11安装Msql8.0版本详细安装步骤!

文章目录 前言一、下载Mysql二、安装Mysql三、登录验证三、环境变量配置总结 前言 每次搭建新环境的时候&#xff0c;都需要网上搜寻安装的步骤教程&#xff01;为了以后方便查阅&#xff01;那么本次就记录一下Windows11安装Msql8.0的详细步骤&#xff01;也希望能帮助到有需…

在浏览器中使用websocket协议

在浏览器中使用websocket协议 浏览器中提供了 WebSocket 类&#xff0c;我们可以直接使用&#xff1a; new WebSocket((url: string | URL, protocols?: string | string[] | undefined))url&#xff1a;指定连接的 URL&#xff0c;只支持 ws、wss 协议&#xff0c;否则会提…

类与对象题目

第一题 该题说明了静态方法不依靠对象访问&#xff0c;所以即使是null也能正常运行&#xff0c;当然正确访问应该是通过类型访问&#xff0c;不应该用null去访问&#xff08;用null也不会报错&#xff0c;也能使用静态方法&#xff09;。 第二题 局部变量不允许被static修饰&am…

swagger使用手册

1.导入依赖 <!--引入swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</…

【DFS深度优先搜索专题】【蓝桥杯备考训练】:迷宫、奶牛选美、树的重心、大臣的旅费、扫雷【已更新完成】

目录 1、迷宫&#xff08;《信息学奥赛一本通》&#xff09; 2、奶牛选美&#xff08;USACO 2011 November Contest Bronze Division&#xff09; 3、树的重心&#xff08;模板&#xff09; 4、大臣的旅费&#xff08;第四届蓝桥杯省赛Java & C A组&#xff09; 5、扫…

Window部署AgileConfig

AgileConfig&#xff1a;分布式配置中心 github&#xff1a;GitHub - dotnetcore/AgileConfig: 基于.NET Core开发的轻量级分布式配置中心 / .NET Core lightweight configuration server 下载部署包&#xff1a;Releases dotnetcore/AgileConfig GitHub 版本&#xff1a;…

传统电力运维企业的数字化转型案例

一. 传统电力运维企业面临的主要问题 上海某电力集团企业下属有成套设备公司、电力工程公司&#xff0c;依托于自身的设备制造和工程服务能力&#xff0c;以及多年积累的终端客户资源&#xff0c;几年前该公司成立了电力运维服务公司进入用户侧电力托管运维服务行业。 该公司…

滑块验证码

1.这里针对滑块验证给了一个封装的组件verifition&#xff0c;使用直接可以调用 2.组件目录 3.每个文件的内容 3.1 Api文件中只有一个index.js文件&#xff0c;用来存放获取滑块和校验滑块结果的api import request from /router/axios//获取验证图片 export function reqGe…

算法之前缀和

题目1: 【模板】一维前缀和&#xff08;easy&#xff09; 方法一: 暴力解法, 时间复杂度O(n*q), 当n10^5, q 10^5, 时间复杂度为O(10^10), 会超时. 方法二: 前缀和: 快速求出数组中某一段连续区间的和. 第一步: 预处理出来一个前缀和数组dp: 1. dp[i]表示区间[1,i]里所有元…

TypeScript中的 K、T 、V

文章目录 前言泛型类型链接关系K、T、V 含义自动类型推断泛型的应用场景容器类和数据结构函数和方法接口和类类型约束和扩展常用的工具类型 前言 在 TypeScript 的泛型里经常会碰到一些字母&#xff0c;比如 K、T、V&#xff0c;是不是觉得很奇怪&#xff1f; 泛型类型 图中的…

全基因集GSEA富集分析

原文链接&#xff1a;一文完成全基因集GSEA富集分析 本期内容 写在前面 我们前面分享过一文掌握单基因GSEA富集分析的教程&#xff0c;主要使用单基因的角度进行GSEA富集分析。 我们社群的同学咨询&#xff0c;全基因集的GSEA如何分析呢&#xff1f;&#xff1f;其实&#x…

基于Andriod的连锁药店管理系统(源码|论文)

一、系统架构 前端&#xff1a;vue | uni-app 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. 登录页 02. 管理后台-首页 03. 管理后台-个人中心-修改密码 04. 管理后台-个人中心-个…

npm WARN config init.license Use `--init-license` instead.

背景&#xff1a;近期升级本地node版本&#xff08;v14.15.4 --> v18.19.1&#xff09;&#xff0c;npm -v报警 npm WARN config init.license Use --init-license instead. npm WARN config init.author.name Use --init-author-name instead. 分析&#xff1a; npm高版本…

Python爬虫从基础到入门:script标签中的数据

上一篇文章: Python爬虫从基础到入门:script标签中的数据 1. 分析需要抓取的数据的在哪?2. 获取数据、解析数据3. 下载视频、音频文件4. 参考代码1. 分析需要抓取的数据的在哪? 本篇博文以B站视频为例,B站视频在用户没有登录的状态下,只能观看视频尺寸为360流畅,在登录…

【前缀和】100255. 成为 K 特殊字符串需要删除的最少字符数

本文涉及知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 枚举 LeetCode100255. 成为 K 特殊字符串需要删除的最少字符数 给你一个字符串 word 和一个整数 k。 如果 |freq(word[i]) - freq(word[j])| < k 对于字符串中所有下标 …

BUGKU-WEB cookies

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 看源码看F12&#xff1a;看请求链接看提示&#xff1a;cookies欺骗 相关工具 插件&#xff1a;ModHeader或者hackbarbase64解密 解题步骤 看源码 就是rfrgrggggggoaihegfdiofi48ty598whrefeoia…
最新文章