fengchuanyu 3 dias atrás
pai
commit
a6eae691f5
3 arquivos alterados com 141 adições e 34 exclusões
  1. 42 34
      8_ES6/27_ajax.html
  2. 83 0
      8_ES6/28_promise.html
  3. 16 0
      8_ES6/js/ajax.js

+ 42 - 34
8_ES6/27_ajax.html

@@ -17,45 +17,53 @@
     <div id="cat">
 
     </div>
+    <script src="./js/ajax.js"></script>
     <script>
         // ajax 基本原理
         // 第一步:创建一个对象实例
-        let xhr = new XMLHttpRequest();
-        // 第二步:打开连接
-        // 第一个参数:请求方法(GET、POST)
-        // 第二个参数:请求路径(/api/getData)
-        // 第三个参数:是否异步(true) true 表示异步请求,false 表示同步请求
-        xhr.open("GET", "https://api.thecatapi.com/v1/images/search");
-        // 第三步:发送请求
-        xhr.send();
-        // 第四步:接收响应
-        xhr.onreadystatechange = function () {
-            // onreadystatechange 事件:请求状态改变时触发
-            // readyState 属性:请求状态码,0-4 之间的整数
-            // 状态码:0-4
-            // 0:请求未初始化
-            // 1:服务器连接已建立
-            // 2:请求已接收
-            // 3:请求处理中
-            // 4:请求已完成
-            if (xhr.readyState === 4) {
-                // 请求已完成
-                // 判断请求是否成功 status
-                if (xhr.status === 200) {
-                    // 请求成功
-                    // 响应体:服务器返回的数据 responseText
-                    console.log(xhr.responseText);
-                    // 解析响应体
-                    let data = JSON.parse(xhr.responseText);
-                    console.log(data[0].url);
-                    // 渲染到页面
-                    var cat = document.querySelector("#cat");
-                    cat.innerHTML = `<img src="${data[0].url}" alt="">`
-                }
-            }
-        }
+        // let xhr = new XMLHttpRequest();
+        // // 第二步:打开连接
+        // // 第一个参数:请求方法(GET、POST)
+        // // 第二个参数:请求路径(/api/getData)
+        // // 第三个参数:是否异步(true) true 表示异步请求,false 表示同步请求
+        // xhr.open("GET", "https://api.thecatapi.com/v1/images/search");
+        // // 第三步:发送请求
+        // xhr.send();
+        // // 第四步:接收响应
+        // xhr.onreadystatechange = function () {
+        //     // onreadystatechange 事件:请求状态改变时触发
+        //     // readyState 属性:请求状态码,0-4 之间的整数
+        //     // 状态码:0-4
+        //     // 0:请求未初始化
+        //     // 1:服务器连接已建立
+        //     // 2:请求已接收
+        //     // 3:请求处理中
+        //     // 4:请求已完成
+        //     if (xhr.readyState === 4) {
+        //         // 请求已完成
+        //         // 判断请求是否成功 status
+        //         if (xhr.status === 200) {
+        //             // 请求成功
+        //             // 响应体:服务器返回的数据 responseText
+        //             console.log(xhr.responseText);
+        //             // 解析响应体
+        //             let data = JSON.parse(xhr.responseText);
+        //             console.log(data[0].url);
+        //             // 渲染到页面
+        //             var cat = document.querySelector("#cat");
+        //             cat.innerHTML = `<img src="${data[0].url}" alt="">`
+        //         }
+        //     }
+        // }
 
+    // ajax("GET","https://api.thecatapi.com/v1/images/search",function(res){
+    //     console.log("成功了",res);
+    // });
 
+    ajax("GET","./data/a.json",function(res){
+        console.log("成功了",res);
+    })
+       
     </script>
 </body>
 

+ 83 - 0
8_ES6/28_promise.html

@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+</head>
+<body>
+    <script src="./js/ajax.js"></script>
+    <script>
+        // 回调地狱
+        // ajax("GET","./data/a.json",function(res){
+        //     ajax("GET","./data/b.json",function(res){
+        //         ajax("GET","./data/c.json",function(res){
+        //             console.log("成功了",res);
+        //         })
+        //     })
+        // })
+
+        // Promise 解决回调地狱问题
+        // 创建 Promise 实例  接收一个函数 函数内有两个参数 resolve 代表成功  reject 代表失败
+
+        // 成功的效果  调用 then 方法
+        // let p1 = new Promise((resolve,reject)=>{
+        //     ajax("GET","./data/a.json",function(res){
+        //         resolve(res);
+        //     })
+        // });
+
+        // // 只要promise 中执行了 resolve 方法  就可以通过 then 方法获取到成功的结果
+        // p1.then(res=>{
+        //     console.log(res);
+        // })
+
+        // 失败的效果  调用 catch 方法
+        // let p1 = new Promise((resolve,reject)=>{
+        //     ajax("GET","./data/a.json",function(res){
+        //         reject(res);
+        //     })
+        // });
+        // // 只要promise 中执行了 reject 方法  就可以通过 catch 方法获取到失败的结果
+        // p1.catch(err=>{
+        //     console.log(err);
+        // })
+
+
+
+        // Promise.all 方法  同时执行多个 Promise 实例  等待所有 Promise 实例执行完成后  才调用 then 方法
+        
+        let p1 = new Promise((resolve,reject)=>{
+            ajax("GET","./data/a.json",function(res){
+                resolve(res);
+            })
+        })
+
+        let p2 = new Promise((resolve,reject)=>{
+            ajax("GET","./data/b.json",function(res){
+                resolve(res);
+            })
+        })
+        
+        let p3 = new Promise((resolve,reject)=>{
+            ajax("GET","./data/c.json",function(res){
+                resolve(res);
+            })
+        })
+
+        // Promise如果都成功就会执行 then 方法  如果有一个失败就会执行 catch 方法
+        // Promise.all([p1,p2,p3]).then((res)=>{
+        //     console.log("全部成功",res);
+        // }).catch((res)=>{
+        //     console.log("失败",res);
+        // })
+
+        // Promise.race()  只要第一个 Promise 实例执行成功  就会调用 then 方法  如果 Promise 实例执行失败  就会调用 catch 方法
+        // Promise.race([p1,p2,p3]).then((res)=>{
+        //     console.log("成功",res);
+        // }).catch((res)=>{
+        //     console.log("失败",res);
+        // })
+    </script>
+</body>
+</html>

+ 16 - 0
8_ES6/js/ajax.js

@@ -0,0 +1,16 @@
+function ajax(method, url,foo) {
+    let xhr = new XMLHttpRequest();
+    xhr.open(method, url);
+    xhr.send();
+    xhr.onreadystatechange = function () {
+        if (xhr.readyState === 4) {
+            if (xhr.status === 200) {
+                // console.log(xhr.responseText);
+                let data = JSON.parse(xhr.responseText);
+                foo(data);
+                // return data;
+            }
+        }
+    }
+
+}