From 780502f456f9402831c9726bd6292b0835c0b303 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=90=B4=E8=B6=85?=
<9828390+wu-chao24@user.noreply.gitee.com>
Date: Fri, 2 Dec 2022 15:56:46 +0000
Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: 吴超 <9828390+wu-chao24@user.noreply.gitee.com>
---
...24\346\211\230\347\254\224\350\256\260.md" | 41 +++++
.../11.29 AJAX\347\254\224\350\256\260.md" | 163 ++++++++++++++++++
...47\224\237AJAX\347\254\224\350\256\260.md" | 145 ++++++++++++++++
.../12.1Promise\347\254\224\350\256\260.md" | 58 +++++++
4 files changed, 407 insertions(+)
create mode 100644 "30\345\220\264\350\266\205/\347\254\224\350\256\260/11.28\344\272\213\344\273\266\345\247\224\346\211\230\347\254\224\350\256\260.md"
create mode 100644 "30\345\220\264\350\266\205/\347\254\224\350\256\260/11.29 AJAX\347\254\224\350\256\260.md"
create mode 100644 "30\345\220\264\350\266\205/\347\254\224\350\256\260/11.30\345\216\237\347\224\237AJAX\347\254\224\350\256\260.md"
create mode 100644 "30\345\220\264\350\266\205/\347\254\224\350\256\260/12.1Promise\347\254\224\350\256\260.md"
diff --git "a/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.28\344\272\213\344\273\266\345\247\224\346\211\230\347\254\224\350\256\260.md" "b/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.28\344\272\213\344\273\266\345\247\224\346\211\230\347\254\224\350\256\260.md"
new file mode 100644
index 0000000..f882b8d
--- /dev/null
+++ "b/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.28\344\272\213\344\273\266\345\247\224\346\211\230\347\254\224\350\256\260.md"
@@ -0,0 +1,41 @@
+## 事件委托
+
+ 事件委托是利用事件冒泡,只指定一个事件处理程序来管理某一类型的所有事件。
+
+1. on方法
+
+ ```
+ $(function(){
+ $("#lists").on("click","li",function(event){
+ var target = $(event.target);
+ target.css("background-color","red");
+ })
+ })
+ ```
+
+2. delegate()方法
+
+ ```
+ $(function(){
+ $("#lists").delegate("li","click",function(event){
+ var target = $(event.target);
+ target.css("background-color","red");
+ })
+ })
+ ```
+
+ on()方法和delegate()方法对于事件委托的写法很像。并且执行事件委托的时候只有子元素(本文中的li)会触发事件,而代为执行的父元素(本文中为ul)不会触发事件,所以我们不需要盘判断触发事件的元素节点名,这一点明显优于原生的JavaScript。
+
+3. bind()方法
+
+ $(function(){
+ $("#lists").bind("click","li",function(event){
+ var target = $(event.target);
+ if(target.prop("nodeName")=="LI"){
+ target.css("background-color","red");}
+ })
+ })
+
+bind()方法同原生的JavaScript实现方法一样,当父元素代子元素执行事件时,父元素也会触发事件,所以我们需要判断一下触发事件的元素名。此外,用bind()方法给元素绑定事件的时候要注意,它只能给已经存在DOM元素添加事件,不能给未来存在DOM
+
+元素添加添加事件。如果要频繁地添加DOM元素,并且给新添加的DOM元素绑定事件的话,用live(),delegate(),on()等方法。鉴于jQuery从1.7之后就不推荐live()和delegate()方法了
\ No newline at end of file
diff --git "a/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.29 AJAX\347\254\224\350\256\260.md" "b/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.29 AJAX\347\254\224\350\256\260.md"
new file mode 100644
index 0000000..859f97c
--- /dev/null
+++ "b/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.29 AJAX\347\254\224\350\256\260.md"
@@ -0,0 +1,163 @@
+### 1. AJAX 简介
+
+AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:==无刷新获取数据==。AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。
+
+### 2. AJAX特点
+
+##### 1AJAX 的优点
+
+1. 可以无需刷新页面而与服务器端进行通信。
+2. 允许你根据用户事件来更新部分页面内容。
+
+##### 2 AJAX 的缺点
+
+1. 没有浏览历史,不能回退
+2. 存在跨域问题(同源)
+3. SEO 不友
+
+### 3.使用
+
+##### 1 XMLHttpRequest
+
+有关Ajax的所有操作都是通过`XMLHttpRequest`来操作的。
+
+##### 2 服务端的准备
+
+在使用Ajax之前,因为需要对服务端发送请求,因此这里使用`express`框架,创建`server.js`文件搭建一个服务器。由于Ajax默认是服从同源策略,因此在服务器中设置`Access-Control-Allow-Origin`响应头在解决跨域问题(CORS跨域)。
+
+```javascript
+// server.js
+const express = require('express')
+// 创建应用对象
+const app = express()
+// 创建路由规则
+app.get('/index', (request, response) => {
+ // 设置允许跨域的响应头
+ response.setHeader('Access-Control-Allow-Origin', '*')
+ // 设置响应体
+ response.send('hello ajax')
+})
+app.post('/index', (request, response) => {
+ response.setHeader('Access-Control-Allow-Origin', '*')
+ response.send('post ajax')
+})
+
+// 监听端口,启动服务
+app.listen(8282, () => {
+ console.log('服务器启动,8000端口监听中...');
+})
+复制代码
+```
+
+在测试过程中,要保证服务端处于开启状态,开启命令:`node server.js`
+
+## 4.同步与异步
+
+```
+* `xhr.open`的第三个参数是async,默认为true,用来控制xhr是否以异步形式发送请求
+* 当以同步形式调用时,javascript会在`xhr.send`执行后直到收到响应为止进行等待
+
+## 响应数据格式
+
+* 影响到客户端的javascript如何对服务端返回的数据进行解析
+* 服务端需要设置合理的content-type来决定客户端如何对其进行解析
+
+### XML
+
+* 响应头为application/xml
+* 从responseXML中获取,且能通过dom操作来操作xml
+
+### JSON
+
+* 响应头为application/json
+
+## 兼容方案
+
+* 对于IE5/6需要使用兼容方案
+ `xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('microsoft.XMLHTTP')`
+
+```
+
+## 5.jQuery中的封装
+
+```
+
+```
\ No newline at end of file
diff --git "a/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.30\345\216\237\347\224\237AJAX\347\254\224\350\256\260.md" "b/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.30\345\216\237\347\224\237AJAX\347\254\224\350\256\260.md"
new file mode 100644
index 0000000..a6a2335
--- /dev/null
+++ "b/30\345\220\264\350\266\205/\347\254\224\350\256\260/11.30\345\216\237\347\224\237AJAX\347\254\224\350\256\260.md"
@@ -0,0 +1,145 @@
+## 一.原生AJAX
+
+### 1、GET方法
+
+```javascript
+//1. 创建XMLHttpRequest类型的对象
+const xhr = new XMLHttpRequest();
+//2. 调用open方法对请求进行初始化 设置请求方法为“GET”且指明目标资源地址,可以带上查询字符串
+xhr.open('GET', 'http://127.0.0.1:8000/server?a=100&b=200&c=300');
+//3. 调用send方法发送请求
+xhr.send();
+//4. 给xhr对象绑定相关响应事件以处理服务端返回的结果
+// on when 当....时候
+// readystate 是 xhr 对象中的属性, 表示状态 0 1 2 3 4(详见下方解释)
+// change 改变
+xhr.onreadystatechange = function() {
+ //判断 (服务端返回了所有的结果)
+ if (xhr.readyState === 4) {
+ //判断响应状态码 200 404 403 401 500
+ // 2xx 成功
+ if (xhr.status >= 200 && xhr.status < 300) {
+ //处理结果 行 头 空行 体
+ //响应
+ // console.log(xhr.status);//状态码
+ // console.log(xhr.statusText);//状态字符串
+ // console.log(xhr.getAllResponseHeaders());//所有响应头
+ // console.log(xhr.response);//响应体
+ } else {
+ console.warn('请求结果不成功');
+ }
+ }
+}
+```
+
+### 2. post方法;
+
+#### 传送数据量大,处理效率低,安全性高,不会被缓存
+
+- send()中需要添加参数,建议设置请求头
+- 参数可以是null或者xhr.send()|send(带有参数的)post请求在传递值的情况下必须 设置 xhr.setRequestHeader(header,value)
+
+```
+ var xhr = new XMLHttpRequest();
+ xhr.open('post', 'data.json', true);
+ xhr.send({ a: 100, b: 200 });
+ //设置行头
+ xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState == 4 && xhr.status == 200) {
+ console.log(xhr.response['No1']);
+ // 手动转成对象
+ // var obj = JSON.parse(xhr.response);
+ }
+ }
+```
+
+### 3. 响应数据处理;将返回的json类型的数据转换成对象
+
+##### 1.手动转换
+
+```
+var obj = JSON.parse(xhr.response)
+console.log(obj.name)
+```
+
+##### 2.自动转换
+
+```
+//创建对象后设置:
+xhr.responseType = 'json';
+console.log(xhr.response.name)
+```
+
+### 二,jQuery Ajax
+
+#### 1,$.get();执行get请求方式的ajax
+
+```
+ $('button').eq(0).click(
+ function () {
+ $.get('data.json',{a:100,b:200},function (data) {
+ console.log(data);
+ },'json');
+ }
+ )
+```
+
+#### 2,$.post();执行post请求方式的ajax
+
+```
+ $('button').eq(1).click(
+ function () {
+ $.post('data.json',{a:100,b:200},function (data) {
+ console.log(data);
+ },'json');
+ }
+ )
+```
+
+#### 3,$.getJSON()
+
+- 通过Ajax获取服务器中JSON格式的数据
+- “全局方法”,直接定义在jQuery对象(即“$”)下的方法
+
+```
+ $('button').eq(2).click(
+ function () {
+ $.getJSON('data.json',function (data) {
+ console.log(data);
+ })
+ }
+ )
+```
+
+#### 4,$.getScript();动态加载JavaScript的方法
+
+- 通过AJAX来获取并运行一个外部JavaScript文件
+- 异步跨域加载JavaScript文件,可避免提前加载JavaScript文件
+- 减少服务器和客户端的负 担,加快页面加载速度
+
+```
+ $('button').eq(3).click(
+ function () {
+ $.getScript('test.js');
+ }
+ )
+```
+
+#### 5,$.ajax();核心方法,所有的其他方法都是在内部使用此方法
+
+- 以上方法用ajax()都能实现
+
+```
+ $('button').eq(4).click(
+ function () {
+ $.ajax({
+ url:'data.json',
+ type:'get',
+ data:{a:100,b:200},
+ success:(data) => console.log(data),
+ error:()=> console.log('请求失败')
+ })
+ }
+ )
+```
\ No newline at end of file
diff --git "a/30\345\220\264\350\266\205/\347\254\224\350\256\260/12.1Promise\347\254\224\350\256\260.md" "b/30\345\220\264\350\266\205/\347\254\224\350\256\260/12.1Promise\347\254\224\350\256\260.md"
new file mode 100644
index 0000000..7927e06
--- /dev/null
+++ "b/30\345\220\264\350\266\205/\347\254\224\350\256\260/12.1Promise\347\254\224\350\256\260.md"
@@ -0,0 +1,58 @@
+## Promise
+
+在JavaScript中,promise是一个对象,返回一个希望在未来得到的结果,不是现在。
+
+一个promise有三种状态:
+
+- pending: 初始状态,既没有完成,也没有失败。
+- fulfilled: 完成/成功
+- rejected: 失败/拒绝
+
+一个promise以`pending`状态开始,最后会走向`fulfilled`成功或者`rejected`失败。
+
+## 创建一个Promise
+
+要创建Promise对象,我们使用Promise构造函数
+
+```javascript
+let completed = true;
+
+let learnJS = new Promise((resolve, reject) => {
+ if (completed) {
+ resolve("我已经完成JS学习");
+ } else {
+ reject("我未完成JS学习");
+ }
+});
+复制代码
+```
+
+Promise构造函数接受一个函数作为执行器,执行器函数的参数是两个函数,分别为resolve、reject,代表成功和失败。
+
+当我们new Promise()时,执行器函数默认执行。
+
+```
+console.log(learnJS);
+//输出:Promise {: '我已经完成学习'}
+```
+
+### PromiseResult
+
+接收**resolve**或者**reject**中的参数
+
+```
+const p = new Promise((resolve, reject) => {
+ // resolve('这是成功');
+ reject('这是失败');
+}).then(data =>{
+ console.log('成功then调用');
+ return 123
+ //catch:捕获异常
+}).catch(
+ function (e) {
+ console.log(e);
+ }
+)
+//then(成功时调用的函数,失败时调用的函数),返回值也是一个promise对象,pending
+console.log(p)
+```
\ No newline at end of file
--
Gitee