前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ajax(三)

Ajax(三)

作者头像
且陶陶
发布2023-04-12 15:38:32
7350
发布2023-04-12 15:38:32
举报
文章被收录于专栏:Triciaの小世界

XMLHttpRequest

概念

是浏览器内置的一个构造函数

作用

基于 new 出来的 XMLHttpRequest 实例对象,可以发起 Ajax 的请求。

其中,axios 中的 axios.get()、axios.post()、axios() 方法,都是基于 XMLHttpRequest(简称:XHR) 封装出来的。

我们可以直接基于 XMLHttpRequest 发起Ajax请求。

一、使用 XMLHttpRequest 发起请求

主要的 4 个实现步骤: ① 创建 xhr 对象 ② 调用 xhr.open() 函数 ③ 调用 xhr.send() 函数 ④ 注册load 事件

例如:

代码语言:javascript
复制
// 原生ajax发送get请求
    // 1. 声明一个实例对象  
    const xhr = new XMLHttpRequest()
    // 2. 初始化一个请求以准备发送
    xhr.open('GET','http://www.liulongbin.top:3009/api/get')
    // 3. 发送请求
    xhr.send()
    // 4. 监听load事件,然后拿到请求的响应
    xhr.addEventListener('load',function () {
      console.log(xhr.response)
    })

发起 GET 请求时携带查询参数

在请求的 URL 地址后面通过 ? 的形式携带查询参数。

代码语言:javascript
复制
// 如果需要传递查询参数 则需要手动拼接   
    xhr.open('GET','接口/api/get**?username=Tt&age=17**')

发起 POST 请求,并携带请求体数据

当需要携带请求体数据时,需要进行额外的两步操作: ① 在 xhr.open() 之后,调用 xhr.setRequestHeader() 函数,指定请求头的编码格式 ② 在 xhr.send() 中,指定要提交的请求体数据

一、请求体数据为普通数据

代码语言:javascript
复制
//  使用xhr发起一个post请求
    // 1. 生成一个实例
    const xhr = new XMLHttpRequest()
    // 2. 初始化一个请求准备发送
    xhr.open('POST','接口/api/post')
    // 3. 设置请求编码方式
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded')
    // 4. 发送请求  (请求体)
    xhr.send('username=Tt&age=17')
    // 5. 监听load事件,获取到请求响应
    xhr.addEventListener('load',function () {
      console.log(xhr.response)
    })

二、请求体数据为FormData格式的数据

代码语言:javascript
复制
	const fd = new FormData()
    const xhr = new XMLHttpRequest()
    xhr.open('POST','接口/api/post')
    // 注意:对于multipart/form-data编码格式的数据,不需要设置请求头的编码格式
    // xhr.setRequestHeader('Content-Type','multipart/form-data')
    xhr.send(fd)
    xhr.addEventListener('load' , function () {
      console.log(xhr.response)
    })

三、请求体数据为JSON数据格式

代码语言:javascript
复制
const jsonStr = '{"username":"Tt" , "age":18}'  // 属性值一定要用**双引号**包裹
    const xhr = new XMLHttpRequest()
    xhr.open('POST','接口/api/post')
    xhr.setRequestHeader('Content-Type','application/json')
    xhr.send(jsonStr)
    xhr.addEventListener('load' , function() {
      console.log(xhr.response)
    })

数据交换格式

概念:

数据交换格式,就是服务器端与客户端之间数据传输的格式。

主要有两种数据交换格式:

  1. XML
  2. JSON ⭐
在这里插入图片描述
在这里插入图片描述

JSON

概念

JSON(全称:JavaScript Object Notation)是一种数据交换格式,它本质上是用字符串的方式来表示对象或数组类型的数据。

代码语言:javascript
复制
const json = '{"username": "Tt" , "age": 17}'

JSON 数据

用字符串的方式来表示的对象或数组类型的数据,叫做 JSON 数据。

JSON数据格式有两种

  1. 对象格式
  2. 数组格式

对象格式的JSON数据

最外层使用 {} 进行包裹,内部的数据为key:value键值对的结构。

  1. key 必须使用英文的双引号进行包裹
  2. value的值只能是字符串(必须用双引号包裹)、数组、 布尔、 null、 数组、对象类型
代码语言:javascript
复制
// 1)  json字符串表示的对象转化为js对象
    const jsonStr = '{"username": "Tt" , "age": 17}'

数组格式的 JSON 数据

数组格式的 JSON 数据,最外层使用 [ ] 进行包裹,内部的每一项数据之间使用英文的 , 分隔。其中: 每一项的值类型只能是字符串、数字、布尔值、null、数组、对象这 6 种类型之一。

代码语言:javascript
复制
// 2)   json数组转化为js数组
    const jsonArr = '["小红","小明","大黑"]'

1. 把 JSON 数据转换为 JS 数据

调用浏览器内置的 JSON.parse() 函数,可以把 JSON 格式的字符串转换为 JS 数据

例如:

代码语言:javascript
复制
// 1)  json字符串表示的对象转化为js对象
    const jsonStr = '{"username": "Tt" , "age": 17}'
    const  res1 = JSON.parse(jsonStr)
    console.log(res1)
    // 2)   json数组转化为js数组
    const jsonArr = '["小红","小明","大黑"]'
    const res2 = JSON.parse(jsonArr)
    console.log(res2)

2. 把 JS 数据转换为 JSON 数据

调用浏览器内置的 JSON.stringify() 函数,可以把 JS 数据转换为 JSON 格式的字符串

例如:

代码语言:javascript
复制
// 1)  js对象转化为json字符串
        const obj = {
            name: 'Tt',
            age: 18
        }
        const res1 = JSON.stringify(obj)
        console.log(res1)
        // 2)   js数组转化为json数组
        const arr = ['小敏', '小花', '大明']
        const res2 = JSON.stringify(arr)
        console.log(res2)

序列化和反序列化

① 把真实数据转换为字符串的过程,叫做序列化 ② 把字符串转换为真实数据的过程,叫做反序列化

在这里插入图片描述
在这里插入图片描述

JSON文件

概念:

以.json结尾的文件,里面存放一些配置信息 package.json

格式要求:

  1. 最外层要是 {}[]
  2. 属性名必须要使用“”包裹,值的话如果是字符串,也必须要用“”包裹
  3. json文件中不允许写注释
  4. 值的类型可以是:string number Boolean null array object
  5. undefined ,函数 不能作为json文件的值

封装自己的axios

代码语言:javascript
复制
// 函数声明
function myAxios(options) {
    console.log('options',options)
    // 1. 声明一个xhr实例
    const xhr = new XMLHttpRequest()
    // 2. 准备一个请求以备发送  (参数:请求方式   请求地址)
    xhr.open(options.method,options.url)
    // 3. 发送一个请求
    xhr.send()
    // 4. 监听load事件,获取到请求的响应
    xhr.addEventListener('load',function() {
        console.log(xhr.response)
        options.success(xhr.response)
    })
}

//  函数调用
    myAxios({
        method: 'GET',
        url: '接口/api/get',
        success: function(result) {  // 相应的数据给到result
          console.log(result)
          // 拿到请求响应做处理
        }
      })
原生Ajax封装axios原理图
原生Ajax封装axios原理图
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • XMLHttpRequest
    • 概念
      • 作用
        • 一、使用 XMLHttpRequest 发起请求
          • 发起 GET 请求时携带查询参数
          • 发起 POST 请求,并携带请求体数据
      • 数据交换格式
        • 概念:
          • JSON
            • 概念
          • JSON 数据
            • 对象格式的JSON数据
            • 数组格式的 JSON 数据
            • 1. 把 JSON 数据转换为 JS 数据
            • 2. 把 JS 数据转换为 JSON 数据
          • 序列化和反序列化
            • JSON文件
              • 概念:
              • 格式要求:
            • 封装自己的axios
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档