4 前端前置技术(上):AJAX技术、Axios技术(前端发送请求)

文章目录

  • 前言
  • 一、Ajax技术(从服务端获取数据,发送各种请求)
    • 0 接口文档管理:使用apipost等接口测试软件创建接口便于前端后端分离测试
    • 1 基本概念
    • 2 原生Ajax使用示例(几年前的早期用法)
  • 二、 Axios技术(对原生的Ajax进行了封装)
    • 1 基本概念
      • (1)Axios是什么
      • (2)常见的请求方式有哪些?
    • 2 快速入门
      • 示例1:入门案例
      • 示例2:入门案例+绑定事件
    • 3 Axios通用请求格式语法
      • 示例1:params传递参数发送get请求
      • 示例2:data传递参数发送post请求
      • 综合案例:地区查询
    • 4 axios 错误处理


前言

本课程所有接口采用apifox模拟,全部使用的是
B站-AJAX和黑马头条-数据管理平台
这个里面的接口进行测试


一、Ajax技术(从服务端获取数据,发送各种请求)

参考视频
官方文档

0 接口文档管理:使用apipost等接口测试软件创建接口便于前端后端分离测试

参考视频

  • 接口文档管理:
    • 在线
      • apipost
      • apifox
      • postman等等
    • 离线
      • word
      • md

在线的apipost这些测试工具功能很多,具体的后面不断深入学习慢慢了解这个测试工具,这个测试工具必须会用,后面无论是前端还是后端都需要频繁使用这个工具来进行测试。

下面的Ajax技术案例中的后端返回json数据都是通过这些接口工具的mock功能模拟生成的。

1 基本概念

学习本节前建议先去学习什么是GET、POST请求这些

  • 概念: Asynchronous JavaScript And XML,异步的JavaScript和XML。
    Ajax技术是一个异步交互技术,通过这个Ajax技术我们就可以从服务端获取数据
  • 作用:
    • 数据交换: 通过Ajax可以给服务器发送请求,并获取服务器响应的数据。
    • 异步交互: 可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如: 搜索联想、用户名是否可
      用的校验等等。
      在这里插入图片描述
  • 同步与异步请求区别
    • 举一个例子就好理解了
      我们在点击某些页面的时候,如果网络不好界面就会一直卡在转圈圈的界面,我们不能进行任何操作,这就是同步请求;如果我们点击某些页面就算网络不好我们还是可以操作页面,例如我们下载文件这个请求就是典型的异步请求。
  • Ajax技术就是一项发送异步请求的技术了。
    在这里插入图片描述

2 原生Ajax使用示例(几年前的早期用法)

  • 太繁琐,现在已经淘汰,了解一下
    可以使用网页版的apifox、或者apipost(个人感觉apifox更好用,界面更加清晰,apipost界面有点复杂,好多功能要摸索)生成一个get请求响应数据作为测试

  • 使用

    • (1)准备数据地址: http://hmajax.itheima.net/api/province
      示例接口文档:获取-省份列表
    • (2)创建XMLHttpRequest对象: 用于和服务器交换数据
    • (3)向服务器发送请求
    • (4)获取服务器响应数据

示例:

<body><input type="button" value="获取数据" onclick = "getData()"><div id="div1"></div>
</body><script>function getData(){// 1 创建 XMLHttpRequest 对象var xmlHttpRequest = new XMLHttpRequest();// 2 发送异步请求xmlHttpRequest.open("GET","http://hmajax.itheima.net/api/province");xmlHttpRequest.send(); // 发送请求// 3 获取服务器响应的数据xmlHttpRequest.onreadystatechange = function(){if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){      // 判断服务器是否响应成功//var data = JSON.parse(xmlHttpRequest.responseText);document.getElementById("div1").innerHTML = xmlHttpRequest.responseText;// xmlHttpRequest.responseText :返回服务器响应的数据,以字符串形式返回}}}</script>

查看结果:
在这里插入图片描述

  • 代码解释
    • 官方文档
      在这里插入图片描述

二、 Axios技术(对原生的Ajax进行了封装)

1 基本概念

(1)Axios是什么

参考视频

  • 介绍:Axios 对原生的Ajax进行了封装,简化书写,快速开发。
  • 官网(使用文档等): https://www.axios-http.cn/
    Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js

(2)常见的请求方式有哪些?

请求方法: 对服务器资源,要执行的操作
在这里插入图片描述

请求方法操作
GET获取数据
POST提交数据
PUT修改数据(全部)
DELETE删除数据
PATCH修改数据(部分)

比较常用的就是get和post请求,其余的说实话post请求好像也都能干

2 快速入门

  • step1: 引入Axios的js文件
    <script src=“https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js”></script>

  • 使用 axios 函数发送请求,并获取响应结果
    (1)传入配置对象
    (2)再用 .then 回调函数接收结果,并做后续处理
    下面的语法,默认是get请求
    在这里插入图片描述

示例1:入门案例

参考视频

  • 需求: 请求目标资源地址,拿到省份列表数据,显示到页面
    在这里插入图片描述

  • 目标资源地址: http://hmajax.itheima.net/api/province
    接口文档说明

<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></body><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>

结果:
在这里插入图片描述

示例2:入门案例+绑定事件

<body><!--axios库地址:https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js省份数据地址:http://hmajax.itheima.net/api/province目标: 使用axios库, 获取省份列表数据, 展示到页面上1. 引入axios库--><body><input type="button" value="获取数据" onclick = "getData()"><div id="div1"></div></body></body><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>function getData(){// 通过axios发送异步请求,默认是GET请求axios({url: "http://hmajax.itheima.net/api/province"}).then(result =>{document.getElementById("div1").innerHTML = result.data.list.join('<br>');// 通过 result.data 获取服务器返回的的JSON对象})}</script>

结果:
在这里插入图片描述

3 Axios通用请求格式语法

  • 通用请求格式语法
axios({method: 'post',        // 可以省略就是默认get请求, 大小写都可以 get\post\put\delete\patchurl: '/user/123',      // 注意 参数传递的那部分要写写到params里面去data: { ... },         // 写到这个里面的数据会直接发送出去, 例如json、xml等结构化数据都可以在这个里面发送出去params: { ... },       // 写到这个里面的请求参数会拼接到 url 中发送出去  http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2
});

一般地:

  • url中要传递参数数据就写到params里面去,get,post方法可以
  • data里面可以传任何参数,特别是文件上传、json、xml等结构化数据都通过这个传,所以POST/PUT 数据会比较多
  • 误区:params只能传递get数据、data只能传POST/PUT 数据(这个结合后端的接收请求接口就好理解了)
  • 除了url,method,data,params都是可选项,根据实际情况判断是否要不要

具体的怎么发送还是要看后端接口是怎么写的
@RequestBody :参数来源是请求体中的json等结构化数据
@RequestParam :参数来源可以是url或者请求体的表单数据
@RequestPart:用于上传文件,参数来源是请求体中的表单数据
@PathVariable:参数来源是url中的路径变量

示例1:params传递参数发送get请求

  • 语法: 使用 axios 提供的 params 选项
  • 注意: axios 在运行时把参数名和值,会拼接到 url?参数名=值
  • 城市列表: http://hmajax.itheima.net/api/city?pname=河北省
    在这里插入图片描述
    接口文档
<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>

结果:
在这里插入图片描述

示例2:data传递参数发送post请求

参考视频

  • 需求:
    在这里插入图片描述
    接口文档
<body><button class="btn">注册用户</button><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>/*注册用户: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: 'hejuzs_01',    // 注意,重新注册用户名要修改,同样用户名不能注册两次password: 'hejuzs_01'}})})</script>
</body>

结果:
在这里插入图片描述

综合案例:地区查询

参考视频

  • 需求:在这里插入图片描述
    接口文档
<!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><!-- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"> --><link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css"><style>:root {font-size: 15px;}body {padding-top: 15px;}</style>
</head><body><div class="container"><form id="editForm" class="row"><!-- 输入省份名字 --><div class="mb-3 col"><label class="form-label">省份名字</label><input type="text" value="北京" name="province" class="form-control province" placeholder="请输入省份名称" /></div><!-- 输入城市名字 --><div class="mb-3 col"><label class="form-label">城市名字</label><input type="text" value="北京市" name="city" class="form-control city" placeholder="请输入城市名称" /></div></form><button type="button" class="btn btn-primary sel-btn">查询</button><br><br><p>地区列表: </p><ul class="list-group"><!-- 示例地区 --><li class="list-group-item">东城区</li></ul></div><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>/*获取地区列表: http://hmajax.itheima.net/api/area查询参数:pname: 省份或直辖市名字cname: 城市名字*/// 目标: 根据省份和城市名字, 查询地区列表// 1. 查询按钮-点击事件document.querySelector('.sel-btn').addEventListener('click', () => {// 2. 获取省份和城市名字let p_name = document.querySelector('.province').valuelet c_name = document.querySelector('.city').value// 3. 基于axios请求地区列表数据axios({url: 'http://hmajax.itheima.net/api/area',params: {pname:p_name,cname:c_name}}).then(result => {// console.log(result)// 4. 把数据转li标签插入到页面上let list = result.data.listconsole.log(list)let theLi = list.map(areaName => `<li class="list-group-item">${areaName}</li>`).join('')console.log(theLi)document.querySelector('.list-group').innerHTML = theLi})})</script>
</body></html>

结果:
在这里插入图片描述

4 axios 错误处理

参考视频

  • 语法:在 then 方法的后面,通过点语法调用 catch 方法,传入回调函数并定义形参
    在这里插入图片描述

  • 处理:注册案例,重发注册时通过弹框提示用户错误原因

  • 需求:
    在这里插入图片描述

<!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>axios错误处理</title>
</head><body><button class="btn">注册用户</button><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>/*注册用户: http://hmajax.itheima.net/api/register请求方法: POST参数名:username: 用户名 (中英文和数字组成, 最少8位)password: 密码 (最少6位)目标: 点击按钮, 通过axios提交用户和密码, 完成注册需求: 使用axios错误处理语法, 拿到报错信息, 弹框反馈给用户*/document.querySelector('.btn').addEventListener('click', () => {axios({url: 'http://hmajax.itheima.net/api/register',method: 'post',data: {username: 'hejuzs_01',password: 'hejuzs_01'}}).then(result => {// 成功console.log(result)}).catch(error => {      // error里面可以捕获到错误信息,如果后端的java接口抛出异常信息,返回了了一个状态码不正常的响应信息,那么就会进入到catch里面捕获到// 失败// 处理错误信息console.log(error)console.log(error.response.data.message)alert(error.response.data.message)})})</script>
</body></html>

结果:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google C++ Style / 谷歌C++开源风格

文章目录 前言1. 头文件1.1 自给自足的头文件1.2 #define 防护符1.3 导入你的依赖1.4 前向声明1.5 内联函数1.6 #include 的路径及顺序 2. 作用域2.1 命名空间2.2 内部链接2.3 非成员函数、静态成员函数和全局函数2.4 局部变量2.5 静态和全局变量2.6 thread_local 变量 3. 类3.…

在 Mac M2 上安装 PyTorch 并启用 MPS 加速的详细教程与性能对比

1. 安装torch 在官网上可以查看安装教程&#xff0c;Start Locally | PyTorch 作者安装了目前最新的torch版本2.5.1&#xff0c;需要提前安装python3.9及以上版本&#xff0c;作者python版本是python3.11最新版本 使用conda安装torch&#xff0c;在终端进入要安装的环境&…

股指入门:股指期货是什么意思?在哪里可以做股指期货交易?

股指期货是一种以股票指数为标的物的期货合约&#xff0c;也可以称为股票指数期货或期指。 股指期货是什么意思&#xff1f; 股指期货是一种金融衍生品&#xff0c;其标的资产是股票市场上的股指&#xff0c;例如标普500指数、道琼斯工业平均指数、上证50指数等。 股指期货允…

ZooKeeper单节点详细部署流程

ZooKeeper单节点详细部署流程 文章目录 ZooKeeper单节点详细部署流程 一.下载稳定版本**ZooKeeper**二进制安装包二.安装并启动**ZooKeeper**1.安装**ZooKeeper**2.配置并启动**ZooKeeper** ZooKeeper 版本与 JDK 兼容性3.检查启动状态4.配置环境变量 三.可视化工具管理**Zooke…

【高级篇 / IPv6】(7.2) ❀ 04. 在60E上配置ADSL拨号宽带上网(IPv4) ❀ FortiGate 防火墙

【简介】除了单位用户以外&#xff0c;大部分个人用户目前使用的仍然是30E、50E、60E系列防火墙&#xff0c;固件无法达到目前最高版本7.6&#xff0c;这里以最常用的60E为例&#xff0c;演示固件版本7.2下实现ADSL拨号宽带的IPv6上网。由于内容比较多&#xff0c;文章分上、下…

51单片机07 串口通信

串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信。51单片机内部自带UART&#xff08;Universal Asynchronous Recei…

【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信

Kubernetes中Pod间的通信 本系列文章共3篇: 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信【Kubernetes Pod间通信-第2篇】使用BGP实现Pod到Pod的通信(本文介绍)【Kubernetes Pod间通信-第3篇】Kubernetes中Pod与ClusterIP服务之间的通信…

DeepSeek私有化本地部署图文(Win+Mac)

目录 一、DeepSeek私有化本地部署【Windows】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 a、直接访问 b、chatbox网页访问 二、DeepSeek本地部署【Mac】 1、安装Ollama 2、配置环境变量 3、下载模型 4、使用示例 5、删除已下载的模型 三、DeepSeek…

点(线)集最小包围外轮廓效果赏析

“ 图像、点集、线集合最小外轮廓计算应用较为广泛&#xff0c;如抠图、神奇选择、LOD、碰撞检查等领域&#xff0c;提高场景效率” 1.前言 作者基于递归迭代求解实现点集的最小外轮廓计算&#xff0c;在CGLib库中实现&#xff0c;已集成于CGViewer&#xff0c;可联系作者试用&…

博客园-awescnb插件-geek皮肤优化-Markdown样式支持

&#x1f496;简介 博客园-awescnb插件-geek皮肤下&#xff0c;Markdown语法中对部分样式未正常支持&#xff0c;可以通过自定义CSS进行完善。 ✨定义列表 定义自定义CSS 博客园->管理->设置->页面定制 CSS 代码 添加代码 /* 定义列表 */ dl dt{font-size: 14px;f…

接口测试与常用接口测试工具

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 首先&#xff0c;什么是接口呢&#xff1f; 接口一般来说有两种&#xff0c;一种是程序内部的接口&#xff0c;一种是系统对外的接口。 系统对外的接口&#xff…

三维粒子滤波(Particle Filter)MATLAB例程,估计三维空间中匀速运动目标的位置(x, y, z),提供下载链接

三维粒子滤波(Particle Filter)MATLAB例程,估计三维空间中匀速运动目标的位置(x, y, z) 文章目录 介绍功能运行结果代码介绍 本 MATLAB 代码实现了三维粒子滤波( P a r t i c l e F i l t e

语言月赛 202311【基因】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202311] 基因 题目描述 有一个长度为 n n n 的字符串 S S S。其只包含有大写字母。 小 A 将 S S S 进行翻转后&#xff0c;得到另一个字符串 S ′ S S′。两个字符串 S S S 与 S ′ S S′ 对应配对。例如说&#xff0c;对…

PostgreSQL函数自动Commit/Rollback所带来的问题

一、综述 今天在PostgreSQL遇到一个奇怪的现象&#xff0c;简而言之&#xff0c;是想用函数&#xff08;存储过程&#xff09;实现插入记录&#xff0c;整个过程没报错但事后却没找到记录&#xff01;忙活半天&#xff0c;才发现原因是PostgreSQL函数&#xff08;存储过程&…

JVM为什么要指针压缩?为什么能指针压缩?原理是什么?

面试官&#xff1a;为什么要指针压缩&#xff0c;为什么能指针压缩&#xff1f;原理是什么&#xff1f; 指针压缩&#xff08;Pointer Compression&#xff09;是 Java 虚拟机&#xff08;JVM&#xff09;中用于优化内存使用的一种技术&#xff0c;特别是在 64 位环境下。 为…

Mac上搭建k8s环境——Minikube

1、在mac上安装Minikube可执行程序 brew cask install minikub 安装后使用minikube version命令查看版本 2、安装docker环境 brew install --cask --appdir/Applications docker #安装docker open -a Docker #启动docker 3、安装kubectl curl -LO https://storage.g…

Kafka 可靠性探究—副本刨析

Kafka 的多副本机制提升了数据容灾能力。 副本通常分为数据副本与服务副本。数据副本是指在不同的节点上持久化同一份数据&#xff1b;服务副本指多个节点提供同样的服务&#xff0c;每个节点都有能力接收来自外部的请求并进行相应的处理。 1 副本刨析 1.1 相关概念 AR&…

逻辑起源 - 比较DS与豆包对“逻辑”源头的提炼差异

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 问题&#xff1a;“逻辑”的源头是什么&#xff1f; 豆包回答&#xff1a; “逻辑” 一词源…

Qt:Qt环境配置安装

搭建Qt开发环境 Qt的开发工具概述 Qt 支持多种开发工具&#xff0c;其中比较常用的开发工具有&#xff1a;Qt Creator、Visual Studio、Eclipse。 Qt Creator Qt Creator是⼀个轻量级的跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为使用Qt框架进行应用程…

文献阅读分享《新闻推荐中的审议式多样性:操作化与实验用户研究》

标题期刊年份Deliberative Diversity for News Recommendations: Operationalization and Experimental User StudyProceedings of the Seventeenth ACM Conference on Recommender Systems (RecSys 23)2023 &#x1f31f;论文背景 在信息爆炸的时代&#xff0c;新闻推荐系统…