首页 > 其他分享 >AJAX复习总结

AJAX复习总结

时间:2024-07-17 09:57:20浏览次数:17  
标签:总结 axios const 复习 xhr AJAX Promise result console

AJAX复习总结

AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。简单来说,AJAX就是让网页变得更快、更灵活的一种方法

举个例子:当你浏览一个网站时有一个搜索框,每次你输入搜索内容提交后,整个页面重新刷新,再显示搜索结果,这样也太慢了些!!!

但有了AJAX之后,当我们在搜索框输入内容提交时,它会悄悄在后台与服务器通信,获取搜索结果,然后只更新网页搜索结果部分,页面其它部分保持不变

在这里插入图片描述

基础知识

axios基本使用

  • axios是一个基于 Promise 的 HTTP 客户端,是一个第三方库

1)引入 axios.js 文件到自己的网页中:axios.js文件链接: https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js

2)明确axios函数的使用语法

axios({
  url: '目标资源地址'
}).then((result) => {
  // 对服务器返回的数据做后续处理
})
错误处理
  • 使用 axios 的 catch 方法,捕获这次请求响应的错误并做后续处理
axios({
  // ...请求选项
}).then(result => {
  // 处理成功数据
}).catch(error => {
  // 处理失败错误
})

认识URL

  • 定义:统一资源定位符,简称网址,用于访问服务器上资源

  • 组成:三部分组成(协议-钥匙、域名-地址、资源路径-物品位置)

在这里插入图片描述

1)http协议:超文本传输协议,规定了浏览器和服务器传递数据的格式
在这里插入图片描述

2)域名:标记服务器在互联网中的位置,想访问哪台服务器,就得先知道它的域名

在这里插入图片描述

3)资源路径:一个服务器有多个资源,根据标记看你想要访问哪条
在这里插入图片描述

查询参数

  • 定义:携带给服务器额外信息,让服务器返回我想要的某一部分数据而不是全部数据

  • 用法:在 url 网址后面用?拼接格式:http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2

  • axios携带参数

<body>
  <!-- 
    城市列表: http://hmajax.itheima.net/api/city
    参数名: pname
    值: 省份名字
  -->
  <p></p>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    axios({
      url: 'http://hmajax.itheima.net/api/city',
      // 查询参数
      params: {
        pname: '辽宁省'
      }
    }).then(result => {
      console.log(result.data.list)
      document.querySelector('p').innerHTML = result.data.list.join('<br>')
    })
  </script>
</body>

常用请求方法

  • 如:GET,POST,PUT,DELETE,PATCH(这些都是http协议规定的),每个单词对应一种对服务器资源要执行的操作

在这里插入图片描述

<body>
  <button class="btn">注册用户</button>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /*
      注册用户: http://hmajax.itheima.net/api/register
      请求方法: POST
      参数名:
        username: 用户名 (中英文和数字组成, 最少8位)
        password: 密码 (最少6位)

      目标: 点击按钮, 通过axios提交用户和密码, 完成注册
      需求: 使用axios错误处理语法, 拿到报错信息, 弹框反馈给用户
    */
   document.querySelector('.btn').addEventListener('click', () => {
    axios({
      url: 'http://hmajax.itheima.net/api/register',
      method: 'post',
      data: {
        username: 'itheima007',
        password: '7654321'
      }
    }).then(result => {
      // 成功
      console.log(result)
    }).catch(error => {
      // 失败
      // 处理错误信息
      console.log(error)
      console.log(error.response.data.message)
      alert(error.response.data.message)
    })
   })
  </script>
</body>

GET 和 POST 请求方法的区别

  1. GET是从服务器上获取数据,POST是向服务器上传递数据的
  2. GET通过URL来传递参数,POST是放在请求体中
  3. GET会被浏览器主动缓存, POST不会,需要手动设置
  4. 浏览器回退的时候, GET不会重新提交, 而POST会重新提交表单
  5. Params主要用于传递GET请求的URL(查询)参数;data主要用于传递POST请求的请求体数据

HTTP协议-请求报文

  • 就是浏览器发送给服务器的内容,如注册用户,发送的请求报文

  • 组成:请求行(1)、请求头(2-11)、空行(12)、请求体(13)
    在这里插入图片描述

  • 通过谷歌的网页面板查看请求报文
    在这里插入图片描述

HTTP协议-响应报文

  • 响应行(状态行):协议、HTTP响应状态码、状态信息

  • 响应头:以键值对的格式携带的附加信息,比如 Content-Type

  • 空行:分隔响应头,空行之后的是返回给浏览器的资源

  • 响应体:返回的资源
    在这里插入图片描述

  • HTTP 响应状态码用来表明请求是否成功完成
    在这里插入图片描述

form-seralize插件

  • 是为了快速收集表单元素的值
<body>
  <form action="javascript:;" class="example-form">
    <input type="text" name="username">
    <br>
    <input type="text" name="password">
    <br>
    <input type="button" class="btn" value="提交">
  </form>
  <!-- 
    目标:在点击提交时,使用form-serialize插件,快速收集表单元素值
    1. 把插件引入到自己网页中
  -->
  <script src="./lib/form-serialize.js"></script>
  <script>
    document.querySelector('.btn').addEventListener('click', () => {
      /**
       * 2. 使用serialize函数,快速收集表单元素的值
       * 参数1:要获取哪个表单的数据
       *  表单元素设置name属性,值会作为对象的属性名
       *  建议name属性的值,最好和接口文档参数名一致
       * 参数2:配置对象
       *  hash 设置获取数据结构
       *    - true:JS对象(推荐)一般请求体里提交给服务器
       *    - false: 查询字符串
       *  empty 设置是否获取空值
       *    - true: 获取空值(推荐)数据结构和标签结构一致
       *    - false:不获取空值
      */
      const form = document.querySelector('.example-form')
      const data = serialize(form, { hash: true, empty: true })
      // const data = serialize(form, { hash: false, empty: true })
      // const data = serialize(form, { hash: true, empty: false })
      console.log(data)
    })
  </script>
</body>

Bootstrap弹框

  • 不离开当前页面,显示单独的内容,如点击添加,出现一个小页面
<body>
  <!-- 
    目标:使用Bootstrap弹框
    1. 引入bootstrap.css 和 bootstrap.js
    2. 准备弹框标签,确认结构
    3. 通过自定义属性,控制弹框的显示和隐藏
   -->
  <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target=".my-box">
    显示弹框
  </button>

  <!-- 
    弹框标签
    bootstrap的modal弹框,添加modal类名(默认隐藏)
   -->
  <div class="modal my-box" tabindex="-1">
    <div class="modal-dialog">
      <!-- 弹框-内容 -->
      <div class="modal-content">
        <!-- 弹框-头部 -->
        <div class="modal-header">
          <h5 class="modal-title">Modal title</h5>
          <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
        </div>
        <!-- 弹框-身体 -->
        <div class="modal-body">
          <p>Modal body text goes here.</p>
        </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>

  <!-- 引入bootstrap.js -->
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js"></script>
</body>

AJAX原理

XMLHttpRequest学习

基础使用
  • AJAX的原理就是window 提供的 XMLHttpRequest

  • axios 是对 XHR 相关代码进行了封装,让我们只关心传递的接口参数

  • 学习 XHR 可以了解 axios 内部与服务器交互过程的真正原理
    在这里插入图片描述

<body>
  <p class="my-p"></p>
  <script>
    /**
     * 目标:使用XMLHttpRequest对象与服务器通信
     *  1. 创建 XMLHttpRequest 对象
     *  2. 配置请求方法和请求 url 地址
     *  3. 监听 loadend 事件,接收响应结果
     *  4. 发起请求
    */
    // 1. 创建 XMLHttpRequest 对象
    const xhr = new XMLHttpRequest()

    // 2. 配置请求方法和请求 url 地址
    xhr.open('GET', 'http://hmajax.itheima.net/api/province')

    // 3. 监听 loadend 事件,接收响应结果
    xhr.addEventListener('loadend', () => {
      console.log(xhr.response)
      const data = JSON.parse(xhr.response)
      console.log(data.list.join('<br>'))
      document.querySelector('.my-p').innerHTML = data.list.join('<br>')
    })

    // 4. 发起请求
    xhr.send()
  </script>
</body>
查询参数
  • 在调用 open 方法的时候,在 url? 后面按照指定格式拼接参数名和值
<body>
  <p class="city-p"></p>
  <script>
    /**
     * 目标:使用XHR携带查询参数,展示某个省下属的城市列表
    */
    const xhr = new XMLHttpRequest()
    xhr.open('GET', 'http://hmajax.itheima.net/api/city?pname=辽宁省')
    xhr.addEventListener('loadend', () => {
      console.log(xhr.response)
      const data = JSON.parse(xhr.response)
      console.log(data)
      document.querySelector('.city-p').innerHTML = data.list.join('<br>')
    })
    xhr.send()
  </script>
</body>
数据提交

1.这次没有axios帮助我们,需要自己设置请求体 Content-Type:application/json,告诉服务的,发过去内容为 JSON 字符串

2.需要自己将 JS 对象转成 JSON 字符串

3.原生 XHR 需要在 send 方法调用时,传入请求体携带

<body>
  <button class="reg-btn">注册用户</button>
  <script>
    /**
     * 目标:使用xhr进行数据提交-完成注册功能
    */
    document.querySelector('.reg-btn').addEventListener('click', () => {
      const xhr = new XMLHttpRequest()
      xhr.open('POST', 'http://hmajax.itheima.net/api/register')
      xhr.addEventListener('loadend', () => {
        console.log(xhr.response)
      })

      // 设置请求头-告诉服务器内容类型(JSON字符串)
      xhr.setRequestHeader('Content-Type', 'application/json')
      // 准备提交的数据
      const userObj = {
        username: 'itheima007',
        password: '7654321'
      }
      const userStr = JSON.stringify(userObj)
      // 设置请求体,发起请求
      xhr.send(userStr)
    })
  </script>
</body>

Promise学习

基础认识
  • 表示(管理)一个异步操作最终状态和结果值的对象

  • 通过学习Promise,可以知道成功和失败状态,可以关联对应处理函数,了解 axios 内部运作的原理。
    在这里插入图片描述

  • 语法:

<body>
  <script>
    /**
     * 目标:使用Promise管理异步任务
    */
    // 1. 创建Promise对象
    const p = new Promise((resolve, reject) => {
      // 2. 执行异步代码
      setTimeout(() => {
        // resolve('模拟AJAX请求-成功结果')
        reject(new Error('模拟AJAX请求-失败结果'))
      }, 2000)
    })

    // 3. 获取结果
    p.then(result => {
      console.log(result)
    }).catch(error => {
      console.log(error)
    })
  </script>
</body>

Promise三种状态
  • 每个 Promise 对象必定处于以下三种状态之一:
  1. 待定(pending):初始状态,既没有被兑现,也没有被拒绝
  2. 已兑现(fulfilled):操作成功完成
  3. 已拒绝(rejected):操作失败
    在这里插入图片描述
<body>
  <script>
    /**
     * 目标:认识Promise状态
    */
    // 1. 创建Promise对象(pending-待定状态)
    const p = new Promise((resolve, reject) => {
      // Promise对象创建时,这里的代码都会执行了
      // 2. 执行异步代码
      setTimeout(() => {
        // resolve() => 'fulfilled状态-已兑现' => then()
        resolve('模拟AJAX请求-成功结果')
        // reject() => 'rejected状态-已拒绝' => catch()
        reject(new Error('模拟AJAX请求-失败结果'))
      }, 2000)
    })
    console.log(p)

    // 3. 获取结果
    p.then(result => {
      console.log(result)
    }).catch(error => {
      console.log(error)
    })
  </script>
</body>

用 Promise 管理 XHR 异步任务
<body>
  <p class="my-p"></p>
  <script>
    /**
     * 目标:使用Promise管理XHR请求省份列表
     *  1. 创建Promise对象
     *  2. 执行XHR异步代码,获取省份列表
     *  3. 关联成功或失败函数,做后续处理
    */
    // 1. 创建Promise对象
    const p = new Promise((resolve, reject) => {
      // 2. 执行XHR异步代码,获取省份列表
      const xhr = new XMLHttpRequest()
      xhr.open('GET', 'http://hmajax.itheima.net/api/province')
      xhr.addEventListener('loadend', () => {
        // xhr如何判断响应成功还是失败的?
        // 2xx开头的都是成功响应状态码
        if (xhr.status >= 200 && xhr.status < 300) {
          resolve(JSON.parse(xhr.response))
        } else {
          reject(new Error(xhr.response))
        }
      })
      xhr.send()
    })

    // 3. 关联成功或失败函数,做后续处理
    p.then(result => {
      console.log(result)
      document.querySelector('.my-p').innerHTML = result.list.join('<br>')
    }).catch(error => {
      // 错误对象要用console.dir详细打印
      console.dir(error)
      // 服务器返回错误提示消息,插入到p标签显示
      document.querySelector('.my-p').innerHTML = error.message
    })
    
  </script>
</body>

基于 Promise 和 XHR 封装 myAxios 函数
<body>
  <p class="my-p"></p>
  <script>
    /**
     * 目标:封装_简易axios函数_获取省份列表
     *  1. 定义myAxios函数,接收配置对象,返回Promise对象
     *  2. 发起XHR请求,默认请求方法为GET
     *  3. 调用成功/失败的处理程序
     *  4. 使用myAxios函数,获取省份列表展示
    */
    // 1. 定义myAxios函数,接收配置对象,返回Promise对象
    function myAxios(config) {
      return new Promise((resolve, reject) => {
        // 2. 发起XHR请求,默认请求方法为GET
        const xhr = new XMLHttpRequest()
        xhr.open(config.method || 'GET', config.url)
        xhr.addEventListener('loadend', () => {
          // 3. 调用成功/失败的处理程序
          if (xhr.status >= 200 && xhr.status < 300) {
            resolve(JSON.parse(xhr.response))
          } else {
            reject(new Error(xhr.response))
          }
        })
        xhr.send()
      })
    }
    // 4. 使用myAxios函数,获取省份列表展示
    myAxios({
      url: 'http://hmajax.itheima.net/api/province'
    }).then(result => {
      console.log(result)
      document.querySelector('.my-p').innerHTML = result.list.join('<br>')
    }).catch(error => {
      console.log(error)
      document.querySelector('.my-p').innerHTML = error.message
    })
  </script>
</body>

AJAX进阶

同步代码和异步代码

同步代码:逐行执行,需原地等待结果后,才继续向下执行

异步代码:调用后耗时,不阻塞代码继续执行(不必原地等待),在将来完成后触发回调函数传递结果;如:setTimeout 、 setInterval,事件,AJAX;依靠回调函数来接收

const result = 0 + 1
console.log(result)
setTimeout(() => {
  console.log(2)
}, 2000)
document.querySelector('.btn').addEventListener('click', () => {
  console.log(3)
})
document.body.style.backgroundColor = 'pink'
console.log(4)
//打印顺序:1,4,2

回调函数地狱

  • 在回调函数中嵌套回调函数,一直嵌套下去就形成了回调函数地狱

  • 问题:可读性差,异常捕获困难

<body>
  <form>
    <span>省份:</span>
    <select>
      <option class="province"></option>
    </select>
    <span>城市:</span>
    <select>
      <option class="city"></option>
    </select>
    <span>地区:</span>
    <select>
      <option class="area"></option>
    </select>
  </form>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目标:演示回调函数地狱
     * 需求:获取默认第一个省,第一个市,第一个地区并展示在下拉菜单中
     * 概念:在回调函数中嵌套回调函数,一直嵌套下去就形成了回调函数地狱
     * 缺点:可读性差,异常无法获取,耦合性严重,牵一发动全身
    */
    // 1. 获取默认第一个省份的名字
    axios({url: 'http://hmajax.itheima.net/api/province'}).then(result => {
      const pname = result.data.list[0]
      document.querySelector('.province').innerHTML = pname
      // 2. 获取默认第一个城市的名字
      axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }}).then(result => {
        const cname = result.data.list[0]
        document.querySelector('.city').innerHTML = cname
        // 3. 获取默认第一个地区的名字
        axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }}).then(result => {
          console.log(result)
          const areaName = result.data.list[0]
          document.querySelector('.area').innerHTML = areaName
        })
      })
    }).catch(error => {
      console.dir(error)
    })
  </script>
</body>

Promise链式调用

基本用法
  • 依靠 then() 方法会返回一个新生成的 Promise 对象特性,继续串联下一环任务,直到结束

  • 解决回调函数嵌套问题
    在这里插入图片描述

<body>
  <script>
    /**
     * 目标:掌握Promise的链式调用
     * 需求:把省市的嵌套结构,改成链式调用的线性结构
    */
    // 1. 创建Promise对象-模拟请求省份名字
    const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('北京市')
      }, 2000)
    })

    // 2. 获取省份名字
    const p2 = p.then(result => {
      console.log(result)
      // 3. 创建Promise对象-模拟请求城市名字
      // return Promise对象最终状态和结果,影响到新的Promise对象
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(result + '--- 北京')
        }, 2000)
      })
    })

    // 4. 获取城市名字
    p2.then(result => {
      console.log(result)
    })

    // then()原地的结果是一个新的Promise对象
    console.log(p2 === p)
  </script>
</body>
解决回调函数地狱问题
  • 每个 Promise 对象中管理一个异步任务,用 then 返回 Promise 对象,串联起来
    在这里插入图片描述
<body>
  <form>
    <span>省份:</span>
    <select>
      <option class="province"></option>
    </select>
    <span>城市:</span>
    <select>
      <option class="city"></option>
    </select>
    <span>地区:</span>
    <select>
      <option class="area"></option>
    </select>
  </form>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目标:把回调函数嵌套代码,改成Promise链式调用结构
     * 需求:获取默认第一个省,第一个市,第一个地区并展示在下拉菜单中
    */
    let pname = ''
    // 1. 得到-获取省份Promise对象
    axios({url: 'http://hmajax.itheima.net/api/province'}).then(result => {
      pname = result.data.list[0]
      document.querySelector('.province').innerHTML = pname
      // 2. 得到-获取城市Promise对象
      return axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }})
    }).then(result => {
      const cname = result.data.list[0]
      document.querySelector('.city').innerHTML = cname
      // 3. 得到-获取地区Promise对象
      return axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }})
    }).then(result => {
      console.log(result)
      const areaName = result.data.list[0]
      document.querySelector('.area').innerHTML = areaName
    })
  </script>
</body>

async 函数和 await

基本用法
  • 在 async 函数内,使用 await 关键字取代 then 函数,等待获取 Promise 对象成功状态的结果值

  • await替代 then 方法来提取 Promise 对象成功状态的结果

<body>
  <form>
    <span>省份:</span>
    <select>
      <option class="province"></option>
    </select>
    <span>城市:</span>
    <select>
      <option class="city"></option>
    </select>
    <span>地区:</span>
    <select>
      <option class="area"></option>
    </select>
  </form>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目标:掌握async和await语法,解决回调函数地狱
     * 概念:在async函数内,使用await关键字,获取Promise对象"成功状态"结果值
     * 注意:await必须用在async修饰的函数内(await会阻止"异步函数内"代码继续执行,原地等待结果)
    */
    // 1. 定义async修饰函数
    async function getData() {
      // 2. await等待Promise对象成功的结果
      const pObj = await axios({url: 'http://hmajax.itheima.net/api/province'})
      const pname = pObj.data.list[0]
      const cObj = await axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }})
      const cname = cObj.data.list[0]
      const aObj = await axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }})
      const areaName = aObj.data.list[0]


      document.querySelector('.province').innerHTML = pname
      document.querySelector('.city').innerHTML = cname
      document.querySelector('.area').innerHTML = areaName
    }

    getData()
  </script>
</body>
捕获错误
  • 用 try catch 捕获同步流程的错误
<script>
    /**
     * 目标:async和await_错误捕获
    */
    async function getData() {
      // 1. try包裹可能产生错误的代码
      try {
        const pObj = await axios({ url: 'http://hmajax.itheima.net/api/province' })
        const pname = pObj.data.list[0]
        const cObj = await axios({ url: 'http://hmajax.itheima.net/api/city', params: { pname } })
        const cname = cObj.data.list[0]
        const aObj = await axios({ url: 'http://hmajax.itheima.net/api/area', params: { pname, cname } })
        const areaName = aObj.data.list[0]

        document.querySelector('.province').innerHTML = pname
        document.querySelector('.city').innerHTML = cname
        document.querySelector('.area').innerHTML = areaName
      } catch (error) {
        // 2. 接着调用catch块,接收错误信息
        // 如果try里某行代码报错后,try中剩余的代码不会执行了
        console.dir(error)
      }
    }

    getData()
  </script>

事件循环

  • JavaScript 单线程(某一刻只能执行一行代码),为了让耗时代码不阻塞其他代码运行,设计了事件循环模型
  • 它允许代码在单线程上异步执行,在调用栈空闲时,反复调用任务队列里回调函数执行机制
    在这里插入图片描述
  • 习题练习:
<script>
    // 目标:回答代码执行顺序
    console.log(1)
    setTimeout(() => {
      console.log(2)
      const p = new Promise(resolve => resolve(3))
      p.then(result => console.log(result))
    }, 0)
    const p = new Promise(resolve => {
      setTimeout(() => {
        console.log(4)
      }, 0)
      resolve(5)
    })
    p.then(result => console.log(result))
    const p2 = new Promise(resolve => resolve(6))
    p2.then(result => console.log(result))
    console.log(7)
    // 1 7 5 6 2 3 4
  </script>

宏任务与微任务

  • ES6 之后引入了 Promise 对象, 让 JS 引擎也可以发起异步任务

  • 异步任务划分为:

宏任务:由浏览器环境执行的异步代码

微任务:由 JS 引擎环境执行的异步代码
在这里插入图片描述

Promise.all 静态方法

  • 合并多个 Promise 对象,等待所有同时成功完成(或某一个失败),做后续逻辑
    在这里插入图片描述
<script>
    /**
     * 目标:掌握Promise的all方法作用,和使用场景
     * 业务:当我需要同一时间显示多个请求的结果时,就要把多请求合并
     * 例如:默认显示"北京", "上海", "广州", "深圳"的天气在首页查看
     * code:
     * 北京-110100
     * 上海-310100
     * 广州-440100
     * 深圳-440300
    */
    // 1. 请求城市天气,得到Promise对象
    const bjPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '110100' } })
    const shPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '310100' } })
    const gzPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '440100' } })
    const szPromise = axios({ url: 'http://hmajax.itheima.net/api/weather', params: { city: '440300' } })

    // 2. 使用Promise.all,合并多个Promise对象
    const p = Promise.all([bjPromise, shPromise, gzPromise, szPromise])
    p.then(result => {
      // 注意:结果数组顺序和合并时顺序是一致
      console.log(result)
      const htmlStr = result.map(item => {
        return `<li>${item.data.data.area} --- ${item.data.data.weather}</li>`
      }).join('')
      document.querySelector('.my-ul').innerHTML = htmlStr
    }).catch(error => {
      console.dir(error)
    })
  </script>

标签:总结,axios,const,复习,xhr,AJAX,Promise,result,console
From: https://blog.csdn.net/weixin_62831076/article/details/140486094

相关文章

  • JS基础知识总结(2)
    一、我们的HTML控件里面原本没有id,也不想去添加id,如何选择它呢?我们可以使用varx=document.getElementsByTagName("input");varheight=x[0].value;这条语句,括号里面的是我们控件的名称。他会选择我们所有的input控件,我们想要什么值,就直接从里头选就是了。这里需要......
  • 最短路算法(总结性,无Dij)
    Floyd利用中介点k进行操作记f[x][y]为xy点之间的最短路径长度其中f[x][y]=min(f[x][y],f[x][k]+f[k][y]);即用k进行松弛操作其中f[x][y]的取值当xy有直接连边时:f[x][y]=w(x,y)当无直接连边时:f[x][y]=+∞当x=y时:f[x][y]=0实现:for(k=1;k<=n;k++){for......
  • 八上一二章复习
    八上一二章复习第一章勾股定理1.1勾股定理1.1.1勾股定理的定义直角三角形两直角边的平方和等于斜边的平方。如果用\(a\),\(b\)和\(c\)分别表示直角三角形的两直角边和斜边,那么\(a^2+b^2=c^2\)。1.1.2勾股定理的应用怎样正确应用勾股定理?1.锁定直角三角形2......
  • STM32通讯方式总结
    STM32通讯方式总结1.SPI通信(SerialPeripheralinterface,串行外围设备接口)是一种高速的,全双工,同步的串行通信总线功能:SPI接口主要应用于EEPROM,FLASH,各种传感器,AD转换器等W25Q32(芯片)是一种使用SPI通讯协议的NORFLASH存储器——案例:SPI外设读写Flash2.串口通信——通信......
  • 前端面试必修--面试八股文(根据本人面试经验总结,持续更新)
    前端八股目录前端铜九铁十面试必备八股文——HTML&CSS-掘金(juejin.cn)webpack和vite之间的区别优点:缺点:1、前端工程化解决的问题1.为什么需要前端工程化?2.前端工程化流程常见请求头前端用户验证方案HTTP基本认证Session-Cookie认证Token认证JWT认证单点登录L......
  • Java SE 总结
    目录1初始Java2数据类型与变量3运算符4程序逻辑控制5方法的使用6数组的定义与使用7 Java类和对象8继承和多态9抽象类和接口10Java中String类11Java异常1初始JavaJDK,JRE,JVMJava代码书写注释标识符关键字标识符:在程序中由用户给类名......
  • 暑假Java自学每日进度总结1
    今日所学:一.常用的cmd命令:1>盘符:2>dir(显示当前文件所有目录)3>cd目录(打开该目录)4>cd..(回到上一目录)5>cd(回到当前盘符初始态)6>cls(清屏)7>exit(退出cmd命令界面)8>cd目录1\目录2...(打开多级目录)二.创建用cmd打开软件的快捷方式:使用环境变量:1>电脑2>属性3>高......
  • JavaSE的整体总结
    JavaSE(JavaStandardEdition)是Java编程语言的基础,广泛应用于各种开发场景。本文将详细介绍JavaSE的基本概念和核心功能,包括初识Java、数据类型和变量、运算符、程序逻辑控制、方法的使用、数组的定义与使用、类和对象、继承和多态、抽象类和接口、String类以及异常处理。1.......
  • Redis实战篇之秒杀优化(基于黑马程序员Redis讲解视频总结)
    1.秒杀优化-异步秒杀思路我们来回顾一下下单流程当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤1、查询优惠卷2、判断秒杀库存是否足够3、查询订单4、校验是否是一人一单5、扣减库存6、创建订单在这六步操作中,又......
  • JS进阶总结
    JS进阶作用域作用域规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问;分为局部作用域和全局作用域局部作用域局部作用域分为函数作用域和块作用域1)函数作用域:函数内部声明的变量,在函数外部无法被访问函数执行完毕后,函数内部的变量实际被清空<sc......