From 4b5d6e6ddfe4be95df427cb49406a3ab51a151a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=98=8E=E5=81=A5?= <2161737470@qq.com>
Date: Mon, 11 Dec 2023 21:51:31 +0800
Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E5=8D=81=E4=BA=8C=E6=AC=A1?=
=?UTF-8?q?=E4=BD=9C=E4=B8=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../20231210 HTTP\345\215\217\350\256\256.md" | 198 ++++++++++++++++++
1 file changed, 198 insertions(+)
create mode 100644 "04 \346\235\216\346\230\216\345\201\245/20231210 HTTP\345\215\217\350\256\256.md"
diff --git "a/04 \346\235\216\346\230\216\345\201\245/20231210 HTTP\345\215\217\350\256\256.md" "b/04 \346\235\216\346\230\216\345\201\245/20231210 HTTP\345\215\217\350\256\256.md"
new file mode 100644
index 0000000..f8f06a3
--- /dev/null
+++ "b/04 \346\235\216\346\230\216\345\201\245/20231210 HTTP\345\215\217\350\256\256.md"
@@ -0,0 +1,198 @@
+## HTTP 协议
+
+规定了浏览器发送及服务器返回内容的==格式==
+
+**HTTP协议 - 请求报文**:浏览器发送给服务器的内容
+
+组成:请求行、请求头、空行、请求体
+
+**HTTP协议 - 响应报文**:服务器按照 HTTP 协议要求的==格式==,返回给浏览器的==内容==
+
+组成:
+
+- ==响应行(状态行)==:协议、==HTTP 响应状态码==、状态信息
+- ==响应头==:以键值对的格式携带的附加信息,比如:==Content-Type==
+- 空行:分隔响应头,空行之后的是服务器返回的资源
+- ==响应体==:返回的资源
+
+## 作业
+
+~~~ js
+/**
+ * 目标一: 获取接口数据并渲染
+ * 1.1 定义自己的外号
+ * 1.2 通过自己的外号,发送异步请求,获取数据
+ * 1.3 将获取的数据渲染
+ */
+
+// 获取标签元素
+const tbody = document.querySelector('tbody')
+
+// 1.1 定义自己的外号
+const creator = '墨下皆是心酸'
+
+// 因为,添加、删除、编辑后都要渲染一遍,所有分装一个渲染函数
+function getBooksList() {
+ // 1.2 通过自己的外号,发送异步请求,获取数据
+ axios({
+ url: 'https://hmajax.itheima.net/api/books',
+ params: {
+ creator
+ }
+ }).then(result => {
+ // 1.3 将获取的数据渲染
+ // console.log(result.data.data);
+ const list = result.data.data
+ tbody.innerHTML = list.map((item, i) => {
+ // 解构数据
+ const { id, bookname, author, publisher } = item
+ // console.log(id, bookname, author, publisher);
+ return `
+
+ ${i + 1} |
+ ${bookname} |
+ ${author} |
+ ${publisher} |
+
+ 删除
+ 编辑
+ |
+
+ `
+ }).join('')
+ })
+}
+getBooksList()
+
+
+/**
+ * 目标二:添加图书
+ * 2.1 获取添加弹框d对象
+ * 2.2 给保存按钮添加点击事件,收集表单信息,隐藏弹框
+ * 2.3 通过获取的表单内容,发送异步请求
+ * 2.4 清空表单,刷新图书列表
+*/
+
+// 2.1 获取 添加弹框 对象
+const addModalDom = document.querySelector('.add-modal')
+const addModal = new bootstrap.Modal(addModalDom)
+
+// 2.2 给保存按钮添加点击事件,收集表单信息,隐藏弹框
+document.querySelector('.add-btn').addEventListener('click', () => {
+ // 获取添加弹框中的表单对象
+ const addForm = document.querySelector('.add-form')
+ // console.log(addForm);
+ // 使用表单插件,获取表单信息
+ const objBook = serialize(addForm, { hash: true, empty: true })
+ // console.log(objBook);
+ // 2.3 通过获取的表单内容,发送异步请求
+ axios({
+ url: "https://hmajax.itheima.net/api/books",
+ method: 'post',
+ data: {
+ creator,
+ ...objBook
+ }
+ }).then(result => {
+ // 2.4 清空表单,刷新图书列表
+ // console.log(result);
+ // 刷新图书列表
+ getBooksList()
+ // 隐藏 添加弹框
+ addModal.hide()
+ // 清空表单
+ addForm.reset()
+ })
+})
+
+/**
+ * 目标三:删除图书
+ * 3.1 给 tbody 添加点击事件(事件委托)
+ * 3.2 通过自定义属性,向接口发送异步请求,删除图书
+ * 3.3 刷新图书列表
+ */
+
+tbody.addEventListener('click', e => {
+
+ // 判断点击的是不是删除
+ if (e.target.className === 'del') {
+ // 是否删除弹框(提高数据安全性)
+ if (!confirm('你确定要删除吗?')) {
+ return
+ }
+ // console.log('你点击的是删除');
+ // 获得父级身上的自定义属性
+ const id = e.target.parentNode.dataset.id
+
+ // 3.2 通过自定义属性,向接口发送异步请求,删除图书
+ axios({
+ url: 'https://hmajax.itheima.net/api/books/' + id,
+ method: 'delete'
+ }).then(result => {
+ // 3.3 刷新图书列表
+ getBooksList()
+ })
+ }
+})
+
+/**
+ * 目标四:修改图书
+ * 4.1 给 tbody 添加点击事件(事件委托),显示弹框
+ * 4.2 通过 id 发送异步请求,获取当前图书的信息,回显在表单上
+ * 4.3 点击 修改 将修改后的数据提交给异步请求,隐藏弹框,刷新表单页面
+ */
+
+// 获取 编辑弹框对象
+const editModalDOM = document.querySelector('.edit-modal')
+const editModal = new bootstrap.Modal(editModalDOM)
+// 4.1 给 tbody 添加点击事件(事件委托),显示弹框
+tbody.addEventListener('click', e => {
+ // 判断点击的是不是编辑
+ if (e.target.className === 'edit') {
+ // console.log('你点击的是编辑');
+ // 获得父级身上的自定义属性
+ const id = e.target.parentNode.dataset.id
+ // 4.2 通过 id 发送异步请求,获取当前图书的信息,回显在表单上
+ axios({
+ url: 'https://hmajax.itheima.net/api/books/' + id,
+ }).then(result => {
+ // console.log(result.data.data);
+ // 因为,获取到的数据的 key 名刚好是每个表单的 类名
+ // 所以,可以先获取响应数据中的所有 key,遍历回显
+ const bookInfo = result.data.data
+ const keys = Object.keys(bookInfo)
+ // console.log(keys);
+ keys.forEach(key => {
+ document.querySelector(`.edit-form .${key}`).value = bookInfo[key]
+ })
+ // 显示弹框
+ editModal.show()
+ })
+ }
+})
+
+// 获取编辑弹框中的表单对象
+const editForm = document.querySelector('.edit-form')
+// 4.3 点击 修改 将修改后的数据提交给异步请求,隐藏弹框,刷新表单页面
+document.querySelector('.edit-btn').addEventListener('click', () => {
+ // 使用插件获取表单信息,并解构
+ const objBook = serialize(editForm, { hash: true, empty: true })
+ // console.log(objBook);
+ // 将修改后的数据提交给异步请求
+ axios({
+ url: 'https://hmajax.itheima.net/api/books/' + objBook.id,
+ method: 'put',
+ data: {
+ creator,
+ ...objBook
+ }
+ }).then(result => {
+ // console.log(result);
+ // 隐藏弹框
+ editModal.hide()
+ // 刷新图书列表
+ getBooksList()
+ })
+})
+~~~
+
--
Gitee