0
点赞
收藏
分享

微信扫一扫

AJAX学习(三)

一、AJAX原理-XMLHttpRequest

(1)定义及原理

定义:XmlHttp是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API。XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。

AJAX的原理也就是XMLHttpRequest对象(下文简称XHR)

注意axios不等于XMLHttpRequest

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

AJAX学习(三)_ios

(2)使用XHR的原因

有更多与服务器数据通信方式

了解axios内部原理

(3)使用XHR

步骤:

创建XMLHttpRequest对象

配置请求方法和请求URL地址

监听Loadend事件,接收响应结果

发起请求

AJAX学习(三)_html_02

代码示例如下:

<!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>
    // <p class="my-p"></p>

    /**
     * 目标:使用XMLHttpRequest对象与服务器通信
     *  1. 创建 XMLHttpRequest 对象
     *  2. 配置请求方法和请求 url 地址
     *  3. 监听 loadend 事件,接收响应结果
     *  4. 发起请求
    */



    //1. 创建 XMLHttpRequest 对象
    const xhr = new XMLHttpRequest()

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

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

    xhr.send()
  </script>
</body>

</html>

AJAX学习(三)_服务器_03

二、XMLHttpRequest-查询参数

(1)定义及语法

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

语法:http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2(UR+?+参数名=值)

注意:参数名1=值1&参数名2=值2   参数之间需要&连接

AJAX学习(三)_ios_04

代码示例如下

<!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>
  <script>
    /**
     * 目标:使用XHR携带查询参数,展示某个省下属的城市列表
    */
	
  	//创建XMLHttpRequest对象
    const xhr = new XMLHttpRequest()
    
    //配置请求方法和请求URL地址
    xhr.open('GET', 'https://hmajax.itheima.net/api/city?pname=辽宁省')
    
    //监听Loadend事件,接收响应结果
    xhr.addEventListener('loadend', () => {
      console.log(xhr.response)
    })

    //发起请求
    xhr.send()
  </script>
</body>

</html>

AJAX学习(三)_html_05

(2)URLSearchParams对象的使用

参数名较多的情况下,使用http://xxxx.com/xxx/xxx?参数名1=值1&参数名2=值2比较麻烦并且容易出错,这时候就需要URLSearchParams对象帮忙了

使用方法如下

const paramsObj = new URLSearchParams({
      参数名1:值1,
      参数名2:值2
    })

    //2生成指定格式查询参数 字符串
    const querString = paramsObj.toString()
    //结果 参数名1=值1&参数名2=值2

示例代码如下

<!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>
  <script>
    /**
     * 目标: 根据省份和城市名字, 查询对应的地区列表
    */

    //1创建 URLSearchParams对象
    // const paramsObj = new URLSearchParams({
    //   参数名1:值1,
    //   参数名2:值2
    // })

    // //2生成指定格式查询参数 字符串
    // const querString = paramsObj.toString()
    // //结果 参数名1=值1&参数名2=值2



    document.querySelector('.sel-btn').addEventListener('click', () => {
      const pname = document.querySelector('.province').value
      const cname = document.querySelector('.city').value

      const qObj = {
        pname,
        cname
      }

      const paramsObj = new URLSearchParams(qObj)
      const querString = paramsObj.toString()
      console.log(querString)

    })
  </script>
</body>

</html>

AJAX学习(三)_服务器_06

AJAX学习(三)_html_07

打印结果说明我们是成功的了,然后就可以使用XHR对象来进行操作了


AJAX学习(三)_ios_08

AJAX学习(三)_服务器_09

三、XMLHttpRequest-数据提交

我们用一张图来概括XMLHttpRequest数据提交的使用方法

AJAX学习(三)_html_10

请求行:请求方法,URL,协议

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

空行:分隔请求头,空行之后的是发送给服务器的资源

请求体:发送的资源

AJAX学习(三)_服务器_11

示例代码如下

<!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>
  <button class="reg-btn">注册用户</button>
  <script>
    /**
     * 目标:使用xhr进行数据提交-完成注册功能
    */



    document.querySelector('.reg-btn').addEventListener('click', () => {

      //1创建 URLSearchParams对象
      const xhr = new XMLHttpRequest()

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

       //3. 监听 loadend 事件,接收响应结果
      xhr.addEventListener('loadend',()=>{
        console.log(xhr.response)
      })

      //设置请求头,告诉服务器内容类型(JSON字符串)
      xhr.setRequestHeader('Content-Type','application/json')

      //准备提交数据
      const userObj = {
        username:'Orange',
        password:'1234567'

      }
      const userStr = JSON.stringify(userObj)
      //设置请求体,发起请求
      xhr.send(userStr)

    })
  </script>
</body>

</html>

AJAX学习(三)_ios_12



举报

相关推荐

0 条评论