【ajax核心01】ajax底层原理

目录

一:XMLHttpRequest对象

二:如何使用XHR

步骤:

注意:

三:XMLHttpRequest-请求参数

[1 定义:](#1 定义:)

[2 案例练习](#2 案例练习)

前端HTML结构:

JS代码

四:XMLHttpRequest-数据提交

核心

五:如何赚钱

一:XMLHttpRequest对象

节选自MDN网站

XMLHttpRequest(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequestAJAX 编程中被大量使用。

axios函数内部采用XMLHttpRequest对象与服务器交互

二:如何使用XHR

步骤:

  1. 创建XMLHttpRequest对象
  2. 配置请求方法和请求url地址
  3. 监听loadend事件,接收响应结果
  4. 发送请求

注意:

利用底层XHR对象获取数据,返回的是对象结构的json字符串,如下图所示。要利用JSON.parse(xhr.response)将对象结构的字符串转化为JS对象

而利用axios,会将返回的数据(json字符串)转换回JS对象

三:XMLHttpRequest-请求参数

1 定义:

浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据

利用axios函数携带查询参数,只需要配置params属性。但是XHR对象携带查询参数,需要在配置的url后面利用拼接方式携带

其使用方式利用模板字符串为其赋值

2 "查"案例练习

需求:输入省份名字和城市名字提交给服务器后,查询到对应的地区列表

前端HTML结构:

javascript 复制代码
<!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>案例_地区查询</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
  <style>
    :root {
      font-size: 15px;
    }

    body {
      padding-top: 15px;
    }
  </style>
</head>

<body>
  <div class="container">
    <form id="editForm" class="row">
      <!-- 输入省份名字 -->
      <div class="mb-3 col">
        <label class="form-label">省份名字</label>
        <input type="text" value="北京" name="province" class="form-control province" placeholder="请输入省份名称" />
      </div>
      <!-- 输入城市名字 -->
      <div class="mb-3 col">
        <label class="form-label">城市名字</label>
        <input type="text" value="北京市" name="city" class="form-control city" placeholder="请输入城市名称" />
      </div>
    </form>
    <button type="button" class="btn btn-primary sel-btn">查询</button>
    <br><br>
    <p>地区列表: </p>
    <ul class="list-group">
      <!-- 示例地区 -->
      <li class="list-group-item">东城区</li>
    </ul>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</body>

</html>

JS代码

实现方法1,利用模板字符串自动拼接方式
javascript 复制代码
  <script>
    /**
     * 目标: 根据省份和城市名字, 查询对应的地区列表
    */
    document.querySelector('.sel-btn').addEventListener('click', () => {
      const province = document.querySelector('.province').value
      const city = document.querySelector('.city').value
      const xhr = new XMLHttpRequest()
      xhr.open('get', `https://hmajax.itheima.net/api/area?pname=${province}&cname=${city}`)
      xhr.addEventListener('loadend', () => {
        // console.log(xhr.response);
        const arr = JSON.parse(xhr.response).list
        const city = arr.map((element, index) => `<li class="list-group-item">${element}</li>`).join('')
        document.querySelector('.list-group').innerHTML = city
      })
      xhr.send()
    })

  </script>
实现方法2,利用URLSearchParams对象实现自动拼接

语法格式

javascript 复制代码
//1 创建URLSearchParams对象
const paramsObj = new URLSearchParams({
    参数名1:值1,
    参数名2:值2
})
//2 生成指定格式查询参数 字符串
const queryString = paramsObj.toString()
//结果:参数名1=值1&参数名2=值2
javascript 复制代码
 document.querySelector('.sel-btn').addEventListener('click', () => {
      const province = document.querySelector('.province').value
      const city = document.querySelector('.city').value
      const paramsObj = new URLSearchParams({
        pname: province,
        cname: city
      })
      const queryString = paramsObj.toString()
      const xhr = new XMLHttpRequest()
//将字符串在?后面实现拼接
      xhr.open('get', `https://hmajax.itheima.net/api/area?${queryString}`)
      xhr.addEventListener('loadend', () => {
        // console.log(xhr.response);
        const arr = JSON.parse(xhr.response).list
        const city = arr.map((element, index) => `<li class="list-group-item">${element}</li>`).join('')
        document.querySelector('.list-group').innerHTML = city
      })
      xhr.send()
    })

四:XMLHttpRequest-数据提交

将原本axios携带对象的data属性(请求体数据)中的数据,转而利用XHR对象方式提交数据

核心

请求头设置Content-Type:application/json

请求体携带JSON字符串

具体步骤如下:

五:如何赚钱

现在是否厌倦了程序员朝九晚五的生活,想给自己生活寻找另一条路径;在校大学生是否愿意在校进行人生中的第一次创业,获取人生第一桶金;是否正在看此篇文章的你愿意通过五年努力,让自己开上梦想的中的车子;

那就从提升认知开始,加入微木的知识星球:微木的创业思考

专属于创业者的交流集中地,创业、认知提升找微木!

1 创业底层方法论

2 从千万本书书籍中挑选出的,人生必读书目清单。

3 认知提升学习资源(秘密)

4 寻找赚钱项目底层方法论

5 好书精华提炼

6 深度链接微木

每天仅需0.3元/天,欢迎加入专属于创业者的交流集中地,创业、认知提升找微木!

相关推荐
大模型玩家七七19 分钟前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
. . . . .27 分钟前
shadcn组件库
前端
2501_9447114335 分钟前
JS 对象遍历全解析
开发语言·前端·javascript
发现一只大呆瓜1 小时前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
css趣多多1 小时前
ctx 上下文对象控制新增 / 编辑表单显示隐藏的逻辑
前端
阔皮大师2 小时前
INote轻量文本编辑器
java·javascript·python·c#
lbb 小魔仙2 小时前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js
_codemonster2 小时前
Vue的三种使用方式对比
前端·javascript·vue.js
寻找奶酪的mouse2 小时前
30岁技术人对职业和生活的思考
前端·后端·年终总结
梦想很大很大2 小时前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go