前端(AJAX)学习笔记(CLASS 2):图书管理案例以及图片上传

* BootStrap弹框

功能:不离开当前页面,显示单独内容,供用户操作

步骤:

1、引入bootstrap.css和bootstrap.js

2、准备弹框标签,确认结构

3、通过自定义属性,控制弹框的显示和隐藏

其中的bootstrap.css链接为:

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">

bootstrap链接为:

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>

以下是模板代码:

      <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h1 class="modal-title fs-5" id="exampleModalLabel">Modal title</h1><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body">...</div><div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button><button type="button" class="btn btn-primary">Save changes</button></div></div></div></div>

利用自定义属性控制弹框的显示和隐藏

data-bs-toggle="modal"

data-bs-target="#exampleModal"

示例的按钮:

<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">Launch demo modal
</button>

如果使用js进行控制:

        //创建弹框对象const modal=new bootstrap.Modal('css选择器')//显示弹框modal.show()//隐藏弹框modal.hide()

1、渲染列表

自己的图书数据:给自己起个外号,并告诉服务器,默认会有三本书,基于这三本书做数据的增删改查

其中的图书列表接口为:

http://ajax-api.itheima.net/api/books

首先基本的html与css代码为以下:

    <!-- 操作列 --><div class="head"><h1 class="title">图书管理</h1><button class="add_btn">添加</button></div>
    <!-- 图书管理列表 --><table><thead><tr><th>序号</th><th>书名</th><th>作者</th><th>出版社</th><th>操作</th></th></thead><tbody><!-- <tr><th>1</th><th>《java程序设计》</th><th>xxx</th><th>高等教育出版社</th><th><span class="del">删除</span><span class="edi">编辑</span></th></tr> --></tbody></table>

以下代码为使用BooyStrap的添加图书弹窗

    <!-- 添加图书弹窗 --><div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h1 class="modal-title fs-5" id="exampleModalLabel">图书管理</h1><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body"><div>书名</div><input class="bookname" type="text" placeholder="请输入书籍名称"><div>作者</div><input class="author" type="text" placeholder="请输入作者名称"><div>出版社</div><input class="publisher" type="text" placeholder="请输入出版社名称"></div><div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button><button type="button" class="btn btn-primary">确定</button></div></div></div></div>

下面为添加图书的js部分:

        const tbody=document.querySelector('tbody')function getBook() {axios({url:'http://ajax-api.itheima.net/api/books'}).then(res => {console.log(res)tbody.innerHTML=res.data.data.map((item,index) =>`<tr><th>${index+1}</th><th>${item.bookname}</th><th>${item.author}</th><th>${item.publisher}</th><th class='${item.id}'><span class="del">删除</span><span class="edi">编辑</span></th></tr>`)})}getBook()// 添加图书操作//创建弹框对象const modal=new bootstrap.Modal('.modal')const add_btn=document.querySelector('.add_btn')        const bookDec=document.querySelectorAll('.modal-body input')//显示弹框        add_btn.addEventListener('click',() => {for(let i=0;i<bookDec.length;i++){bookDec[i].value=null}modal.show() })// 添加图书操作document.querySelector('.btn-primary').addEventListener('click',() =>{axios({url:'http://ajax-api.itheima.net/api/books',method:'post',data:{bookname: bookDec[0].value,author:bookDec[1].value,publisher:bookDec[2].value}}).then(res => {getBook()modal.hide()})})

2、删除数据

当点击删除按钮时,该行的数据将会被删除,并在页面中重新渲染

        // 删除操作document.querySelector('tbody').addEventListener('click',e => {if(e.target.className==='del'){console.log(e.target.parentNode.className);const id=e.target.parentNode.classNameaxios({url:`http://ajax-api.itheima.net/api/books/${id}`,method:'delete'}).then(res => {getBook()})}})

3、修改数据

修改数据部分包括了数据回显以及修改数据

当点击编辑按钮时,会弹出编辑图书弹框

      <!-- 编辑图书弹窗 --><div class="modal fade modal_edi" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><h1 class="modal-title fs-5" id="exampleModalLabel">图书管理</h1><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button></div><div class="modal-body modal_body_edi"><div>书名</div><input class="bookname" type="text" placeholder="请输入书籍名称"><div>作者</div><input class="author" type="text" placeholder="请输入作者名称"><div>出版社</div><input class="publisher" type="text" placeholder="请输入出版社名称"></div><div class="modal-footer"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">取消</button><button type="button" class="btn btn-primary edi_btn">修改</button></div></div></div></div>

再修改数据后,点击修改按钮,将进行修改

       // 点击编辑,获取图书信息const modal_edi=new bootstrap.Modal('.modal_edi')const modal_body_edi=document.querySelectorAll('.modal_body_edi input')document.querySelector('tbody').addEventListener('click',e => {if(e.target.className==='edi'){modal_edi.show()console.log(e.target.parentNode.parentNode.children[0]);const id=e.target.parentNode.classNameaxios({url:`http://ajax-api.itheima.net/api/books/${id}`}).then(res => {console.log(res.data.data)modal_body_edi[0].value=res.data.data.booknamemodal_body_edi[1].value=res.data.data.authormodal_body_edi[2].value=res.data.data.publisher//点击修改按钮,对图书信息进行修改document.querySelector('.edi_btn').addEventListener('click',() => {axios({url:`http://ajax-api.itheima.net/api/books/${id}`,method:'put',data:{bookname:modal_body_edi[0].value,author:modal_body_edi[1].value,publisher:modal_body_edi[2].value}}).then(edi_res =>{getBook()})modal_edi.hide()})}).catch(err => console.log(err))}})

* 图片上传

1、获取图片文件对象

2、使用FormData携带图片文件

const fd=new FormData()
fd.append(参数名,值)

3、提交表单数据到服务器,使用图片url网址

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

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

相关文章

数据结构:双链表list

list 是 C 标准库中的双向链表容器。 list初始化示例&#xff1a; #include <list>int n 7;std::list<int> lst; // 初始化一个空的双向链表 lststd::list<int> lst(n); // 初始化一个大小为 n 的链表 lst&#xff0c;链表中的值默认都为 0std::list<i…

AI Agent Service Toolkit:一站式大模型智能体开发套件

项目简介 该工具包基于LangGraph、FastAPI和Streamlit构建,提供了构建和运行大模型Agent的最小原子能力,包含LangGraph代理、FastAPI服务、用于与服务交互的客户端以及一个使用客户端提供聊天界面的Streamlit应用。用户可以利用该工具包提供的模板快速搭建基于LangGraph框架…

论文概览 |《Urban Analytics and City Science》2023.10 Vol.50 Issue.8

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2023年10月第50卷第8期的论文的题目和摘要&#xff0c;一共包括21篇SCI论文&#xff01; 论文1 Advances in geospatial approaches to transport networks and sustainable mobility …

大语言模型推理能力从何而来?

前言 DeepSeek R1采用强化学习进行后训练&#xff0c;通过奖励机制和规则引导模型生成结构化思维链&#xff08;CoT&#xff09;&#xff0c;从而显著提升了推理能力。这一创新方法使得DeepSeek R1能够在无需大量监督数据的情况下&#xff0c;通过自我进化发展出强大的推理能力…

用 WOW.js 和 animate.css 实现动画效果

用 wow.js 就可以实现动画效果&#xff0c;但由于里面的动画样式太少&#xff0c;一般还会引入 animated.css 第一步&#xff1a;下载 选择合适的包管理器下载对应的内容 pnpm i wow.js animated.css --save 第二步&#xff1a;引入 在main.js中加入&#xff1a; import …

设计模式教程:解释器模式(Interpreter Pattern)

1. 什么是解释器模式&#xff1f; 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;通常用于处理语言&#xff08;例如数学表达式、SQL查询等&#xff09;中的语法和解释。该模式定义了一个文法&#xff0c;并通过解释器类来解释文法中…

STM32MP157A单片机移植Linux驱动深入版

需求整理 在Linux设备树中新增leds节点&#xff0c;其有3个gpio属性&#xff0c;分别表示PE10对应led1&#xff0c;PF10对应led2&#xff0c;PE8对应led3&#xff0c;设备树键值对如下&#xff1a; leds { led1-gpio <&gpioe 10 0>; led2-gpio &l…

本地DeepSeek模型GGUF文件转换为PyTorch格式

接前文,我们在本地Windows系统上,基于GGUF文件部署了DeepSeek模型(DeepSeek-R1-Distill-Qwen-1.5B.gguf版本),但是GGUF是已经量化的版本,我们除了对其进行微调之外,无法对其训练,那么还有没有其他办法对本地的GGUF部署的DeepSeek模型进行训练呢?今天我们就反其道而行之…

http代理IP怎么实现?如何解决代理IP访问不了问题?

HTTP代理是一种网络服务&#xff0c;它充当客户端和目标服务器之间的中介。当客户端发送请求时&#xff0c;请求首先发送到代理服务器&#xff0c;然后由代理服务器转发到目标服务器。同样&#xff0c;目标服务器的响应也会先发送到代理服务器&#xff0c;再由代理服务器返回给…

人工智能之数学基础:施密特正交化

本文重点 在前面的课程中,我们学习了线性空间的基,其中有一个标准正交基的概念,假设现在有一个线性向量空间,然后已经确定了该线性空间的一组基,那么如何将其转变为标准正交基。本文将学习如何通过施密特正交化完成这个任务。 施密特正交化 施密特正交化(Schmidt Orth…

Spark(2)linux和简单命令

&#xff08;一&#xff09;Linux的文件系统 文件系统&#xff1a;操作系统中负责管理和存储文件信息的软件结构称为文件管理系统。 文件系统的结构通常叫做目录树结构&#xff0c;从斜杆/根目录开始; Linux号称万物皆文件&#xff0c;意味着针对Linux的操作&#xff0c;大多…

Grok 3.0 Beta 版大语言模型评测

2025年2月17日至18日&#xff0c;全球首富埃隆马斯克&#xff08;Elon Musk&#xff09;携手其人工智能公司xAI&#xff0c;在美国重磅发布了Grok 3.0 Beta版。这款被誉为“迄今为止世界上最智能的语言模型”的AI&#xff0c;不仅集成了先进的“DeepSearch”搜索功能&#xff0…

基于COSTAR模型的内容创作:如何用框架提升写作质量

目录 前言1. Context&#xff08;上下文&#xff09;&#xff1a;理解背景&#xff0c;奠定写作基础1.1 何为上下文1.2 上下文的作用1.3 案例解析 2. Objective&#xff08;目标&#xff09;&#xff1a;明确写作方向&#xff0c;避免跑题2.1 确立目标2.2 如何设定目标2.3 案例…

Springboot应用开发工具类整理

目录 一、编写目的 二、映射工具类 2.1 依赖 2.2 代码 三、日期格式 3.1 依赖 3.2 代码 四、加密 4.1 代码 五、Http请求 5.1 依赖 5.2 代码 六、金额 6.1?代码 七、二维码 7.1 依赖 7.2 代码 八、坐标转换 8.1 代码 九、树结构 9.1?代码 9.1.1 节点 …

【Research Proposal】基于提示词方法的智能体工具调用研究——研究问题

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;研究问题1. 如何优化提示词方法以提高智能体的工具调用能力&#xff1f;2. 如何解决提示词方法在多模态任务中的挑战&#xff1f;3. 如何通过提示词优化智能体…

Java 大视界 -- 国际竞争与合作:Java 大数据在全球市场的机遇与挑战(94)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

25旅游管理研究生复试面试问题汇总 旅游管理专业知识问题很全! 旅游管理复试全流程攻略 旅游管理考研复试真题汇总

旅游管理复试很难&#xff1f;&#xff01; 别怕&#xff01;经验超丰富的老学姐来给你们出谋划策啦&#xff01; 最近是不是被旅游管理考研复试折磨得够呛&#xff1f;莫慌&#xff01;我这有着丰富复试指导经验的老学姐来帮你们排雷&#xff0c;助力大家顺利上岸&#xff01…

美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台

作者&#xff1a;美的楼宇科技事业部 先行研究中心智能技术部 美的楼宇科技 IoT 数据平台建设背景 美的楼宇科技事业部&#xff08;以下简称楼宇科技&#xff09;是美的集团旗下五大板块之一&#xff0c;产品覆盖多联机组、大型冷水机组、单元机、机房空调、扶梯、直梯、货梯…

Html5学习教程,从入门到精通,HTML5 元素语法知识点及案例代码(2)

HTML5 元素语法知识点及案例代码 一、HTML5 元素概述 HTML5 元素是构成网页的基本单位&#xff0c;每个元素都有特定的语义和功能。HTML5 元素由开始标签、内容和结束标签组成&#xff0c;例如&#xff1a; <p>这是一个段落。</p><p> 是开始标签这是一个段…

23种设计模式 - 备忘录模式

模式定义 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型设计模式&#xff0c;其核心是在不破坏对象封装性的前提下&#xff0c;捕获并保存对象的内部状态&#xff0c;以便后续恢复。该模式特别适用于需要实现撤销/重做、状态回滚等功能的系统&#xff0c;如…