ajax关于axios库的运用小案例

AJAX案例

图书管理

四大功能:

  1. 展示图书
  2. 删除图书
  3. 编辑图书信息
  4. 新增图书

步骤

1.bootstrap弹窗来实现新增和编辑图书时出现的弹窗

有两种方案:

a.可以用自带的属性来进行弹窗的显示和隐藏

b.可以通过JS进行控制,此操作可以进行自定义,比如在隐藏窗口的同时获取表单元素,并进行渲染页面

a方案

在想要进行隐藏和显示的按钮中增加自带的属性

b方案

//1.创建弹窗对象const box = document.querySelector('.name-box');const modal = new bootstrap.Modal(box);//2.绑定点击事件并调用相关显示和隐藏的函数//2.1获取需要绑定点击事件的对象document.querySelector('.edit-btn').addEventListener('click', () => {modal.show();})document.querySelector('.save-btn').addEventListener('click', () => {//获取表单信息并打印const data = document.querySelector('.username').value;console.log('username', data);modal.hide();})

2.渲染列表

a.获取数据

b.渲染数据

图片上传

步骤

  1. 获取图片文件
    • 为input绑定change事件
  2. 使用FormData携带图片文件 – 由于传到服务器的数据需要是form-data,所以需要进行转换,而img为服务器接口指定的参数名
  3. 提交到服务器,获取图片url网址使用

两个知识点

  • 获取input上传的文件数据:e.target.files – 获取的是一个文件列表(伪数组),可以通过下标指定想要的数组
  • 提交到服务器的数据需要是表单数据,则要通过FormData来实现对数据的包裹–const filedata = new FormData(); filedata.append('img', e.target.files[0]);

代码

/*** 目标:图片上传,显示到网页上*  1. 获取图片文件*  2. 使用 FormData 携带图片文件*  3. 提交到服务器,获取图片url网址使用*///1.1. 获取图片文件//为input绑定change事件document.querySelector('.upload').addEventListener('change', e => {console.log(e.target.files[0]);//1.2 使用 FormData 携带图片文件 -- 由于传到服务器的数据需要是form-data,所以需要进行转换,而img为服务器接口指定的参数名const filedata = new FormData();filedata.append('img', e.target.files[0]);//1.3 提交到服务器,获取图片url网址使用axios({url: 'http://hmajax.itheima.net/api/uploadimg',method: 'POST',data: filedata}).then(result => {console.log(result);const myimg = document.querySelector('.my-img');const imgurl = result.data.data.url;myimg.src = imgurl;})})

网页背景更换

步骤

  1. 选择图片上传,获取文件数据,并转换为表单数据格式
  2. 提交到服务器,并获取返回的url地址,赋值给body的背景图style
  3. 将url地址存储到本地以便下次访问网站的时候可以对body的背景图style进行赋值(需要判断本地是否存储了数据)

代码

/*** 目标:网站-更换背景*  1. 选择图片上传,设置body背景*  2. 上传成功时,"保存"图片url网址*  3. 网页运行后,"获取"url网址使用* */
//1.1为更换背景的表单元素绑定change事件
document.querySelector('.bg-ipt').addEventListener('change', e => {console.log(e.target.files[0]);//将文件数据追加到新建的formdata中const Filedata = new FormData();Filedata.append('img', e.target.files[0]);//将该表单数据上传到服务器axios({url: 'http://hmajax.itheima.net/api/uploadimg',method: 'POST',data: Filedata}).then(result => {//获取返回的url地址console.log(result.data.data.url);//给body的背景图赋值const imgUrl = result.data.data.url;document.body.style.backgroundImage = `url(${imgUrl})`;//将该url传入本地存储,以便刷新后依旧可以对body背景图进行赋值localStorage.setItem('bgImg', imgUrl);})
})
//网页运行后,通过本地存储进行背景图赋值,但是要注意第一次进入网站时没有设置背景图
const imgUrl = localStorage.getItem('bgImg');
console.log(imgUrl);
//判断是否存在imgUrl在进行赋值 通过逻辑与的逻辑中断特性imgUrl && (document.body.style.backgroundImage = `url(${imgUrl})`); //逻辑与的优先级高于“=” 

个人信息

步骤

  1. 信息渲染

    • 向服务器获取对应个人的信息

    • 根据服务器所给的数据与表单元素进行对比,将数据进行渲染

      每次网页运行都调用一次渲染函数,从服务器获取数据并将数据渲染到对应标签中

  2. 头像修改

    • 绑定change事件
    • 由于服务器要求,将文件数据和外号都追加到一个新建的表单数据中
    • 向服务器进行提交
    • 获取url网址,对头像的src重新进行赋值
  3. 表单修改

    • 为表单提交按钮绑定点击事件
    • 通过serialize快速获得表单信息
    • 根据服务器添加外号属性
    • 由于服务器要求的gender需要是数字型,因此进行修改
    • 将修改的表单数据提交到服务器
    • 重新调用渲染函数
  4. 操作成功提示

    • 获取提示框标签,并使用bootstrap内置的对象
    • 调用show()方法

新的方法

提示框对象Toast,bootstrap中的一个对象,需要在标签中内置类名toast,并且引入bootstrap相关的JavaScript文件

语法:

//html中的提示框
<!-- toast 提示框 --><div class="toast my-toast" data-bs-delay="1500"><div class="toast-body"><div class="alert alert-success info-box">操作成功</div></div></div>//js中的运用操作,何时调用show()方法//获取提示框标签,并使用bootstrap内置的对象const tiptoastDom = document.querySelector('.my-toast');const tiptoast = new bootstrap.Toast(tiptoastDom);//调用show()方法tiptoast.show();

代码

/*** 目标1:信息渲染*  1.1 获取用户的数据*  1.2 回显数据到标签上* */
//封装一个渲染函数,在运行的时候进行调用,以及修改头像或者表单元素内容的时候进行调用
//将外号作为一个常量进行声明,避免反复向服务器进行操作写错外号
const creator = '老吴';
function painthtml() {//向服务器获取对应个人的信息axios({url: 'http://hmajax.itheima.net/api/settings',method: 'GET',params: {creator}}).then(result => {console.log(result.data.data);//将数据进行渲染const objData = result.data.data;Object.keys(objData).forEach(key => {//根据服务器所给的数据与表单元素进行对比//如果当前的属性名为avatar,对头像的src属性进行赋值if (key === 'avatar') {document.querySelector('.prew').src = objData[key];} else if (key === 'gender') {//如果当前值为gender,对单选框进行赋值//获取单选框对象const whatGender = document.querySelectorAll('.gender');//由于服务器给的规则是0男1女,刚好和下标位置相符,因此可以直接通过下标直接赋值whatGender[objData[key]].checked = true;} else {//其他表单元素无需进行特殊操作,进行对其内容进行赋值document.querySelector(`.${key}`).value = objData[key];}})})}
//每次网页运行都调用一次渲染函数,从服务器获取数据并将数据渲染到对应标签中
painthtml();/*** 目标2:头像切换*  2.1 为对应表单元素绑定change事件*  2.2 获取表单中的文件数据,并按服务器的格式将数据传给服务器*  2.3 将返回的url地址赋值给对应的标签,进行赋值操作* *///绑定change事件
const imgFile = document.querySelector('.upload');
imgFile.addEventListener('change', e => {console.log(e.target.files);//由于服务器要求,将文件数据和外号都追加到一个新建的表单数据中const formdata = new FormData();formdata.append('avatar', e.target.files[0]);formdata.append('creator', creator);//向服务器进行提交axios({url: 'http://hmajax.itheima.net/api/avatar',method: 'PUT',data: formdata}).then(result => {//获取url网址console.log(result.data.data.avatar);document.querySelector('.prew').src = result.data.data.avatar;})
})//快速获取表单元素内容
// const form = document.querySelector('.user-form');
//     const formdata = serialize(form, { hash: true, empty: true });
//     const { avatar, desc, email, gender, nickname } = formdata; //对对象进行结构/*** 目标2:表单修改*  2.1 为对应表单元素绑定change事件*  2.2 获取表单中的文件数据,并按服务器的格式将数据传给服务器*  2.3 将返回的url地址赋值给对应的标签,进行赋值操作* */
//为表单提交按钮绑定点击事件
document.querySelector('.submit').addEventListener('click', () => {//通过serialize快速获得表单信息const form = document.querySelector('.user-form');const formdata = serialize(form, { hash: true, empty: true });//根据服务器添加外号属性formdata.creator = creator;//由于服务器要求的gender需要是数字型,因此进行修改formdata.gender = +formdata.gender;console.log(formdata);//将修改的表单数据提交到服务器axios({url: 'http://hmajax.itheima.net/api/settings',method: 'PUT',data: formdata}).then(result => {console.log(result);//目标4 提示框提示操作成功//获取提示框标签,并使用bootstrap内置的对象const tiptoastDom = document.querySelector('.my-toast');const tiptoast = new bootstrap.Toast(tiptoastDom);//调用show()方法tiptoast.show();//重新渲染页面painthtml();})
})

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

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

相关文章

数据结构-数组(稀疏矩阵转置)和广义表

目录 1、数组定义 1&#xff09;数组存储地址计算示例①行优先②列优先 2&#xff09;稀疏矩阵的转置三元组顺序表结构定义 ①普通矩阵转置②三元组顺序表转置稀疏矩阵③稀疏矩阵的快速转置 3&#xff09;十字链表结构定义 2、广义表定义 1&#xff09;基本操作①GetHead②GetT…

云集电商:如何通过 OceanBase 实现降本 87.5%|OceanBase案例

云集电商&#xff0c;一家聚焦于社交电商的电商公司&#xff0c;专注于‘精选’理念&#xff0c;致力于为会员提供超高性价比的全品类精选商品&#xff0c;以“批发价”让亿万消费者买到质量可靠的商品。面对近年来外部环境的变化&#xff0c;公司对成本控制提出了更高要求&…

【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;WebStorm 目录 问题概述 原因 解决方案 解决方法 潜在问题修改 最终效果呈现 额外内容 管理员界面路由配置 WebStorm背景更换 法一&#xff1a; 法二&#xff1a; 问题概…

一文透彻了解电容

文章目录 一、电容的作用二、电容的选择三、电容的分类四、多层陶瓷电容五、钽电容替代电解电容的误区六、旁路电容的应用问题七、电容的等效串联电阻 ESR八、电解电容的电参数九、电容器参数的基本公式十、电源输入端的 X,Y 安全电容 一、电容的作用 作为无源元件之一的电容&…

Python OpenCV 傅里叶变换

傅里叶变换 傅里叶变换比较难和不容易理解&#xff0c;有错的地方请见谅 傅里叶原理表明&#xff1a;任何连续测量的时序或信号&#xff0c;都可以表示为不同频率的正弦波信号的无限叠加。也就是说&#xff0c;傅里叶变换是一种特殊的积分变换&#xff0c;它能将满足一定条件的…

如何调整pdf的页面尺寸

用福昕阅读器打开pdf&#xff0c;进入打印页面&#xff0c;选择“属性”&#xff0c;在弹出的页面选择“高级” 选择你想调成的纸张尺寸&#xff0c;然后打印&#xff0c;打印出来的pdf就是调整尺寸后的pdf

WPF中如何简单的使用CommunityToolkit.Mvvm创建一个项目并进行 增删改查

目录 开始前准备的数据库dbblog如下&#xff1a; 第一步&#xff1a;创建项目后下载四个NuGet程序包 第二步&#xff1a;删除原本的MainWindow.XAML文件 并创建如下的目录结构 然后在View文件夹下面创建Login.XAML和Main.XAML 并且在App.XAML中将启动项改为Login.X…

基于python多准则决策分析的汽车推荐算法设计与实现

摘要 随着汽车市场的快速发展和消费者需求的多样化&#xff0c;汽车选择变得愈加复杂。为了帮助消费者在众多汽车选项中做出明智的决策&#xff0c;基于多准则决策分析&#xff08;MCDA&#xff09;的汽车推荐算法应运而生。本研究旨在设计和实现一种基于 Python 的汽车推荐系…

xftp连接中不成功 + sudo vim 修改sshd_config不成功的解决方法

我们使用sudo vim不成功&#xff0c;但是我们使用sudo su就可以 了&#xff01; root用户权利更大&#xff01; 喵的&#xff0c;终于成功了&#xff0c;一个xftp连接半天不成功。&#xff08;添加上面的内容就可以连接成功了↑&#xff09;

vue:Transition

1. Transition 1. 基本用法 <Transition> 是Vue 提供的 “内置组件动画组件”&#xff0c;与一般的CSS过渡动画不同的是&#xff0c;它通过在特点时刻给元素或组件增加、移除类名来实现——在一个元素或组件进入和离开 DOM 时应用过渡动画。 下面是一个基本用法&#…

Python 中的字符串匹配算法

在 Python 中&#xff0c;字符串匹配算法用于在一个字符串中寻找一个子串的出现位置&#xff0c;这是许多文本处理任务的核心。下面我将介绍几种常用的字符串匹配算法以及它们在 Python 中的实现方式。 1、问题背景 在 Python 中&#xff0c;字符串匹配是一个非常重要的操作&a…

配置本地策略路由示例

组网需求 RouterA与RouterB间有两条链路相连。 用户希望实现本机下发的不同长度的报文通过不同的下一跳地址进行转发&#xff0c;其中&#xff1a; 长度为64&#xff5e;1400字节的报文设置192.168.1.2作为下一跳地址。长度为1401&#xff5e;1500字节的报文设置192.168.2.2…

【大数据学习 | kafka高级部分】文件清除原理

2. 两种文件清除策略 kafka数据并不是为了做大量存储使用的&#xff0c;主要的功能是在流式计算中进行数据的流转&#xff0c;所以kafka中的数据并不做长期存储&#xff0c;默认存储时间为7天 那么问题来了&#xff0c;kafka中的数据是如何进行删除的呢&#xff1f; 在Kafka…

推荐一款基于Flash的交互式园林设计工具:Garden Planner

Garden Planner是一款由Artifact Interactive开发的基于Flash的交互式园林设计工具。它允许用户以拖放的方式安排植物、树木、建筑物和各种对象&#xff0c;使园林规划变得简单直观。此外&#xff0c;Garden Planner提供工具来快速创建铺路、路径和围栏&#xff0c;帮助用户设计…

微信小程序开发,诗词鉴赏app,诗词推荐实现(二)

微信小程序开发&#xff0c;诗词鉴赏app&#xff08;一&#xff09;&#xff1a; https://blog.csdn.net/jky_yihuangxing/article/details/143501681微信小程序开发&#xff0c;诗词鉴赏app&#xff0c;诗词推荐实现&#xff08;二&#xff09;:https://blog.csdn.net/jky_yih…

关于诊断中的各种时间参数

前言&#xff1a; 因为不会转载&#xff0c;故在这里贴出原文连接&#xff0c;写的非常好&#xff01;条理清晰&#xff0c;一遍看懂king110108 原文链接&#xff1a;UDS之时间参数总结篇_uds时间参数-CSDN博客 以下内容是我自己对这篇文章的一些备注和理解&#xff0c;以及从测…

技术干货|HyperMesh CFD功能详解:虚拟风洞 Part 2

在上期 Part 1文章中&#xff0c;我们介绍了从 v2023 版本开始&#xff0c;虚拟风洞VWT&#xff08;Virtual Wind Tunnel&#xff09;模块合并到HyperMesh CFD中。用户在VWT模块中完成LBM求解器ultraFluidX的前处理设置&#xff0c;导出参数文件XML和模型文件STL&#xff0c;并…

H7-TOOL的CAN/CANFD助手增加帧发送成功标识支持, 继续加强完善功能细节

2.27版本固件正式携带此功能&#xff0c;包括之前做的负载率检测和错误信息展示也将集成到这个版本固件中。 对于接收&#xff0c;我们可以直接看到效果&#xff0c;而发送不行&#xff0c;所以打算在发送的地方展示下发送成功标识。CAN发送不像串口&#xff0c;需要等待应答后…

mysql5安装

1.下载安装包 https://downloads.mysql.com/archives/community/ mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar tar -xvf mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar2.安装依赖 yum -y install perl yum -y install net-tools yum install numactl libaio libaio-devel -y也可…

大模型应用编排工具Dify二开之工具和模型页面改造

1.前言 简要介绍下 dify&#xff1a; ​ 一款可以对接市面上主流大模型的任务编排工具&#xff0c;可以通过拖拽形式进行编排形成解决某些业务场景的大模型应用。 背景信息&#xff1a; ​ 环境&#xff1a;dify-0.8.3、docker-21 ​ 最近笔者在做 dify的私有化部署和二次…