05.XMLHttpRequest(XHR)的基础使用,查询参数和数据提交

一.XMLHttpRequest - 基础使用

  1. AJAX 是浏览器与服务器通信的技术,采用 XMLHttpRequest 对象相关代码

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

  3. 学习 XHR 也是了解 axios 内部与服务器交互过程的真正原理

    png&pos_id=img-f5YEUmdI-1709778022126)

  4. 语法如下:

    const xhr = new XMLHttpRequest()
    xhr.open('请求方法', '请求url网址')
    xhr.addEventListener('loadend', () => {
      // 响应结果
      console.log(xhr.response)
    })
    xhr.send()
    

    在这里插入图片描述

  5. 需求:以一个需求来体验下原生 XHR 语法,获取所有省份列表并展示到页面上

  6. 代码如下:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>XMLHttpRequest_基础使用</title>
    </head>
    
    <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>
    
    </html>
    

二.XMLHttpRequest - 查询参数

  1. 什么是查询参数:携带额外信息给服务器,返回匹配想要的数据

  2. 查询参数原理要携带的位置和语法:http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2

  3. 所以,原生 XHR 需要自己在 url 后面携带查询参数字符串,没有 axios 帮助我们把 params 参数拼接到 url 字符串后面了

  4. 需求:查询河北省下属的城市列表

在这里插入图片描述

  1. 核心代码如下:

    /**
     * 目标:使用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()
    

三.XMLHttpRequest - 数据提交

  1. 了解原生 XHR 进行数据提交的方式

  2. 需求:通过 XHR 完成注册用户功能

    在这里插入图片描述

  3. 步骤和语法:

    1. 注意1:但是这次没有 axios 帮我们了,我们需要自己设置请求头 Content-Type:application/json,来告诉服务器端,我们发过去的内容类型是 JSON 字符串,让他转成对应数据结构取值使用

    2. 注意2:没有 axios 了,我们前端要传递的请求体数据,也没人帮我把 JS 对象转成 JSON 字符串了,需要我们自己转换

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

      const xhr = new XMLHttpRequest()
      xhr.open('请求方法', '请求url网址')
      xhr.addEventListener('loadend', () => {
        console.log(xhr.response)
      })
      
      // 1. 告诉服务器,我传递的内容类型,是 JSON 字符串
      xhr.setRequestHeader('Content-Type', 'application/json')
      // 2. 准备数据并转成 JSON 字符串
      const user = { username: 'itheima007', password: '7654321' }
      const userStr = JSON.stringify(user)
      // 3. 发送请求体数据
      xhr.send(userStr)
      
  4. 核心代码如下:

    /**
     * 目标:使用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)
    })
    

小结

1. AJAX 原理是什么?

window 提供的 XMLHttpRequest

2. 为什么学习 XHR ?

有更多与服务器数据通信方式,了解 axios 内部原理

3. XHR 使用步骤?

  1. 创建 XHR 对象 2. 调用 open 方法,设置 url 和请求方法 3. 监听 loadend 事件,接收结果 4. 调用 send 方法,发起请求

4. XHR 如何携带查询参数?

在调用 open 方法的时候,在 url? 后面按照指定格式拼接参数名和值

5. XHR 如何提交请求体数据?

在 send 中携带请求体数据,要按照后端要求的内容类型携带

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 18:58:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 18:58:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 18:58:01       87 阅读
  4. Python语言-面向对象

    2024-03-10 18:58:01       96 阅读

热门阅读

  1. json-server 快速搭建本地服务器

    2024-03-10 18:58:01       52 阅读
  2. LeetCode111 二叉树的最小深度

    2024-03-10 18:58:01       49 阅读
  3. flask流式响应

    2024-03-10 18:58:01       48 阅读
  4. Flask从入门到精通

    2024-03-10 18:58:01       34 阅读
  5. Python Flask 打包成exe 心得体会

    2024-03-10 18:58:01       42 阅读
  6. 5.49 BCC工具之rdmaucma.py解读

    2024-03-10 18:58:01       42 阅读
  7. 蓝桥杯刷题--python-20-多路归并,贡献法

    2024-03-10 18:58:01       38 阅读
  8. uniapp ui库 px 转 rpx

    2024-03-10 18:58:01       43 阅读
  9. PostgreSQL常用命令汇总

    2024-03-10 18:58:01       40 阅读
  10. CSS实现块级元素水平垂直居中的3种常用方式

    2024-03-10 18:58:01       42 阅读
  11. 调用GPL 开源库的法律问题

    2024-03-10 18:58:01       39 阅读