• AJAX——ajax原理


    1.XMLHttpRequest

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

    关系:axios内部采用XMLHttpRequest与服务器交互

    好处:掌握使用XHR与服务器进行数据交互,了解axios内部原理

     2.使用XMLHttpRequest

    步骤:

    1.创建XMLHttpRequest对象

    2.配置请求方法和请求url地址

    3.监听loadend事件,接收响应结果

    4.发起请求

    需求:获取并展示所有省份名字

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>XMLHttpRequest_基础使用</title>
    8. </head>
    9. <body>
    10. <p class="my-p"></p>
    11. <script>
    12. /**
    13. * 目标:使用XMLHttpRequest对象与服务器通信
    14. * 1. 创建 XMLHttpRequest 对象
    15. * 2. 配置请求方法和请求 url 地址
    16. * 3. 监听 loadend 事件,接收响应结果
    17. * 4. 发起请求
    18. */
    19. // 1.创建XMLHttpRequest对象
    20. const xhr = new XMLHttpRequest()
    21. // 2.配置请求方法和请求url地址
    22. xhr.open('GET', 'http://hmajax.itheima.net/api/province')
    23. // 3.监听loadend事件,接收响应结果
    24. xhr.addEventListener('loadend',() => {
    25. console.log(xhr.response)
    26. const data = JSON.parse(xhr.response)
    27. console.log(data.list.join('
      '
      ))
    28. document.querySelector('.my-p').innerHTML = data.list.join('
      '
      )
    29. })
    30. // 4.发起请求
    31. xhr.send()
    32. </script>
    33. </body>
    34. </html>

    总结:

    1.AJAX原理是什么?

    • XMLHttpRequest对象

    2.为什么学习XHR?

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

    3.XHR使用步骤?

    • 创建XHR对象
    • 调用open方法,设置url和请求方法
    • 监听loadend事件,结构结果
    • 调用send方法,发起请求

    3.XMLHttpRequest-查询参数 

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

    语法:http://xxx.com/xxx/xxx?参数名1=值1&参数名2=值2

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>XMLHttpRequest_查询参数</title>
    8. </head>
    9. <body>
    10. <p class="city-p"></p>
    11. <script>
    12. /**
    13. * 目标:使用XHR携带查询参数,展示某个省下属的城市列表
    14. */
    15. const xhr = new XMLHttpRequest()
    16. xhr.open('GET','http://hmajax.itheima.net/api/city?pname=辽宁省')
    17. xhr.addEventListener('loadend', () => {
    18. console.log(xhr.response)
    19. const data = JSON.parse(xhr.response)
    20. console.log(data)
    21. document.querySelector('.city-p').innerHTML = data.list.join('
      '
      )
    22. })
    23. xhr.send()
    24. </script>
    25. </body>
    26. </html>

    4.地区查询案例

    需求:输入省份和城市名字,查询地区列表

    请求地址:http://hmajax.itheima.net/api/area?参数名1=值1&参数名2=值2

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>案例_地区查询</title>
    8. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
    9. <style>
    10. :root {
    11. font-size: 15px;
    12. }
    13. body {
    14. padding-top: 15px;
    15. }
    16. </style>
    17. </head>
    18. <body>
    19. <div class="container">
    20. <form id="editForm" class="row">
    21. <!-- 输入省份名字 -->
    22. <div class="mb-3 col">
    23. <label class="form-label">省份名字</label>
    24. <input type="text" value="北京" name="province" class="form-control province" placeholder="请输入省份名称" />
    25. </div>
    26. <!-- 输入城市名字 -->
    27. <div class="mb-3 col">
    28. <label class="form-label">城市名字</label>
    29. <input type="text" value="北京市" name="city" class="form-control city" placeholder="请输入城市名称" />
    30. </div>
    31. </form>
    32. <button type="button" class="btn btn-primary sel-btn">查询</button>
    33. <br><br>
    34. <p>地区列表: </p>
    35. <ul class="list-group">
    36. <!-- 示例地区 -->
    37. <li class="list-group-item">东城区</li>
    38. </ul>
    39. </div>
    40. <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    41. <script>
    42. /**
    43. * 目标: 根据省份和城市名字, 查询对应的地区列表
    44. */
    45. // 1. 给查询按钮-点击事件
    46. document.querySelector('.sel-btn').addEventListener('click', () => {
    47. // 2. 收集省份和城市名字
    48. const pname = document.querySelector('.province').value
    49. const cname = document.querySelector('.city').value
    50. // 3.组织查询参数字符串
    51. const qObj = {
    52. pname,
    53. cname
    54. }
    55. // 查询参数对象 -> 查询参数字符串
    56. const paramsObj = new URLSearchParams(qObj)
    57. const queryString = paramsObj.toString()
    58. console.log(queryString)
    59. // 4.使用XHR对象,查询地区列表
    60. const xhr = new XMLHttpRequest()
    61. xhr.open('GET', `http://hmajax.itheima.net/api/area?${queryString}`)
    62. xhr.addEventListener('loadend', () => {
    63. console.log(xhr.response)
    64. const data = JSON.parse(xhr.response)
    65. console.log(data)
    66. const htmlStr = data.list.map(areaName => {
    67. return `<li class="list-group-item">${areaName}</li>`
    68. }).join('')
    69. console.log(htmlStr)
    70. document.querySelector('.list-group').innerHTML = htmlStr
    71. })
    72. xhr.send()
    73. })
    74. </script>
    75. </body>
    76. </html>

    5.XMLHttpRequest-数据提交

    需求:通过XHR提交用户名和密码,完成注册功能

    核心:

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

    请求头携带JSON字符串

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>XMLHttpRequest_数据提交</title>
    8. </head>
    9. <body>
    10. <button class="reg-btn">注册用户</button>
    11. <script>
    12. /**
    13. * 目标:使用xhr进行数据提交-完成注册功能
    14. */
    15. document.querySelector('.reg-btn').addEventListener('click', () => {
    16. const xhr = new XMLHttpRequest()
    17. xhr.open('POST','http://hmajax.itheima.net/api/register')
    18. xhr.addEventListener('loadend', () => {
    19. console.log(xhr.response)
    20. })
    21. // 设置请求头-告诉服务器内容类型(JSON字符串)
    22. xhr.setRequestHeader('Content-Type', 'application/json')
    23. // 准备提交的数据
    24. const userObj = {
    25. username:'itheima001',
    26. password:'7654321'
    27. }
    28. const userStr = JSON.stringify(userObj)
    29. // 设置请求头,发起请求
    30. xhr.send(userStr)
    31. })
    32. </script>
    33. </body>
    34. </html>

  • 相关阅读:
    【Matlab】数据统计分析
    C语言面试题 - 字符空间操作类
    自动驾驶:2022 apollo day 观后感(二)
    【电子通识】USB TYPE-A 2.0/3.0连接器接口
    python之 pyCharm pip安装pandas库失败
    面试问题整理总结
    Android 使用Kotlin封装RecyclerView
    数据库版本控制|一文带你快速入门
    jQuery为元素绑定事件
    网络学习:BGP路径属性分类
  • 原文地址:https://blog.csdn.net/weixin_48719464/article/details/138006585