AJAX 2——Bootstrap弹框使用、图书管理案例、图片上传方法

server/2024/10/21 10:07:52/

AJAX 2——Bootstrap弹框使用、图书管理案例、图片上传方法

1.Bootstrap弹框使用-Modal

  • 通过自定义属性控制

    <button  data-bs-toggle="modal" data-bs-target="CSS选择器">点击该按钮显示弹框</button><button data-bs-dismiss="modal" >Close关闭弹框</button>
    
  • 通过JS控制

     //  1. 创建弹框对象// 2. 调用弹框对象内置方法//   .show() 显示//   .hide() 隐藏const modalDom = document.querySelector('.name-box')const modal = new bootstrap.Modal(modalDom)document.querySelector('.edit-btn').addEventListener('click', () => {document.querySelector('.username').value = '小小怪'modal.show()})document.querySelector('.save-btn').addEventListener('click', () => {const username =  document.querySelector('.username').valueconsole.log(username)modal.hide()})
    

2.案例:图书管理(增删查改)

  • :注意获取数据渲染列表的时候把图书序号获取过来加到删除编辑模块,是为了后续进行删除编辑可以获取该序号并传给服务器进行操作
/*** 目标1:渲染图书列表*  1.1 获取数据*  1.2 渲染数据*/
function getBookList() {axios({url: 'http://hmajax.itheima.net/api/books',params: {creator: '老张'}}).then(result => {console.log(result)const bookList = result.data.dataconsole.log(bookList)const htmlStr = bookList.map((item, id) => {const { bookname, author, publisher } = itemreturn `<tr><td>${id + 1}</td><td>${bookname}</td><td>${author}</td><td>${publisher}</td><td data-id=${item.id}><span class="del">删除</span><span class="edit">编辑</span></td></tr>`}).join('')const list = document.querySelector('.list')list.innerHTML = htmlStr})
}
getBookList()
  • :注意新增完之后要先重置表单,下一次点击新增按钮后表单是空的
// 目标2:新增图书
const creator = '老张'
const addModalDom = document.querySelector('.add-modal')
const addModal = new bootstrap.Modal(addModalDom)
document.querySelector('.add-btn').addEventListener('click', () => {const addForm = document.querySelector('.add-form')const bookObj = serialize(addForm, { hash: true, empty: true })console.log(bookObj);axios({url: 'http://hmajax.itheima.net/api/books',method: 'post',data: {...bookObj,creator}}).then(result => {console.log(result)getBookList()//重置表单addForm.reset()addModal.hide()})})
  • :注意使用的请求方法为删除数据,传递参数的方法为地址传参(由接口文档决定的)
//3.删除列表项
document.querySelector('.list').addEventListener('click', function (e) {if (e.target.classList.contains('del')) {const delId = e.target.parentNode.dataset.idaxios({url: `http://hmajax.itheima.net/api/books/${delId}`,method: 'DELETE',}).then(result => {console.log(result)getBookList()})}
})
  • :注意编辑的逻辑是:点击编辑按钮获取该图书的唯一序号发送给服务器——>服务器返回图书信息——>将图书信息赋给编辑图书页面的输入框并显示编辑框——>点击保存按钮将修改的信息包括该图书的id传递给服务器,请求方法为修改数据PUT——>渲染页面
//4.编辑图书
const editModalDom = document.querySelector('.edit-modal')
const editModal = new bootstrap.Modal(editModalDom)
document.querySelector('.list').addEventListener('click', function (e) {if (e.target.classList.contains('edit')) {const editId = e.target.parentNode.dataset.idaxios({url: `http://hmajax.itheima.net/api/books/${editId}`,}).then(result => {console.log(result.data.data)const bookObj = result.data.data//数据对象属性和标签类名一致  防止表单元素过多要一一赋值const keys = Object.keys(bookObj)keys.forEach(key => {document.querySelector(`.edit-form .${key}`).value = bookObj[key]})})editModal.show()}//4.1编辑 点击保存
})
document.querySelector('.edit-btn').addEventListener('click', function () {const editForm = document.querySelector('.edit-form')//注意这里的id是从哪里来的呢 这里的hidden隐藏了 前面点击编辑的时候以及从服务器获取火来并赋值到value了// <input type="hidden" class="id" name="id" value="509570">const { id, bookname, author, publisher } = serialize(editForm, { hash: true, empty: true })axios({url: `http://hmajax.itheima.net/api/books/${id}`,method: 'PUT',data: {bookname,author,publisher,creator}}).then(result => {console.log(result)getBookList()editModal.hide()})
})

3.案例:图片上传

  • 注意当接口文档标明需要FormData格式上传图片时使用该方法
<body><!-- 文件选择元素 --><input type="file" class="upload"><img src="" alt="" class="my-img"><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>/*** 目标:图片上传,显示到网页上*  1. 获取图片文件*  2. 使用 FormData 携带图片文件*  3. 提交到服务器,获取图片url网址使用*/document.querySelector('.upload').addEventListener('change', e => {//获取图片文件console.log(e.target.files[0])//使用FormData携带图片文件const fd = new FormData()fd.append('img', e.target.files[0])console.log(fd);//提交到服务器axios({url: 'http://hmajax.itheima.net/api/uploadimg',method: 'POST',data: fd}).then(result => {console.log(result)const imgURL = result.data.data.urldocument.querySelector('.my-img').src = imgURL})})</script>
</body>

http://www.ppmy.cn/server/130872.html

相关文章

Django学习笔记十一:部署程序

部署Django应用程序是一个涉及多个步骤的过程&#xff0c;包括选择合适的服务器、配置Web服务器、设置数据库、管理静态文件和媒体文件、以及确保安全性等。以下是一些关键步骤和最佳实践&#xff1a; 选择服务器&#xff1a;你可以选择物理服务器、虚拟私服&#xff08;VPS&am…

网络常用配置和运维命令以及使用方法

一、网络运维常见配置及命令 以下是一些整理简单网络常用配置和运维命令 1、ifconfig/ipconfig&#xff1a;查看和配置网络接口配置。 用法&#xff1a;ifconfig 或 ipconfig2、route/netstat -r&#xff1a;查看路由表。 用法&#xff1a;route -n 或 netstat -r3、netsta…

leetcode209:长度最小的子数组

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xf…

速盾:高防cdn和cdn该到底选哪个?

在网络加速和安全防护领域&#xff0c;高防 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;和普通 CDN 都是常见的解决方案。然而&#xff0c;很多人在面临选择时会感到困惑&#xff0c;不知道该选择高防 CDN 还是普通 CDN。下面我们来分析一下…

13.JVM内存模型深度剖析

一、JDK体系结构 JDK代表Java Development Kit(Java开发工具包)&#xff0c;是用于开发和编译Java应用程序的软件包。JDK是由Oracle提供的Java平台的官方实现&#xff0c;包含了开发和运行Java程序所需的工具、库和JRE(Java Runtime Environment)。 二、JAVA语言跨平台特性 Ja…

【机器学习】线性回归算法简介 及 数学实现方法

线性回归 简介 利用 回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。 数学公式&#xff1a; ℎ_(w) w_1x_1 w_2x_2 w_3x_3 … b w^Txb 概念 ​ 利用回归方程(函数) 对 一个或多个自变量(特征值)和因变量(目标值)之间 关…

自定义类型:结构体

目录 前言&#xff1a; 一、结构体类型的声明 1.1、什么是结构体&#xff1f; 1.2、结构的声明&#xff1a; 1.23、结构体变量的创建和初始化 1.3.1 结构体变量的创建 1.3.2 结构体变量的初始化 1.4、结构的特殊声明 二、结构体的自引用 2.1、概念 2.2、通过链表来理…

测试-BUG篇

文章目录 软件测试的生命周期BUGbug的概念描述bug的要素bug级别bug的生命周期 与开发产生争执怎么办&#xff08;高频考题&#xff09; 软件测试的生命周期 软件测试贯穿于软件的整个生命周期 BUG bug的概念 是指计算机程序中存在的一个错误(error)、缺陷(flaw)、疏忽(mista…