当前位置: 首页 > news >正文

AJAX之原理

目录

    • XMLHttpRequest
      • 基本使用
      • 查询参数
      • 数据提交(注册账号)
    • Promise
      • 基本语法
      • Promise三种状态
      • Promise链式调用
    • async函数和await

XMLHttpRequest

基本使用

XMLHttpRequest对象用于与服务器交互
与axios关系:axios内部采用XMLHttpRequest与服务器交互
请求少的时候,不引用axios直接用XMLHttpRequest可以减少代码体积
使用步骤:

  1. 创建XMLHttpRequest对象
  2. 配置请求方法url地址
  3. 监听loadend事件(加载完成),接收相应结果
  4. 发起请求
    eg:
const xhr = new XMLHttpRequest()
xhr.open('请求方法', '请求url地址')
xhr.addEventListener('loadend', () => {<!-- 响应结果 -->console.log(xhr.response)
})
<!-- 发送请求 -->
xhr.send()

查询参数

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

生成指定格式查询参数:

// 创建URLSearchParams对象
const paramsObj = new URLSearchParams({参数:值
})const queryString = paramsObj.toString()
// 结果:参数名1=值&参数名2=值

数据提交(注册账号)

核心:

  1. 请求头设置Content-Type:application/json
  2. 请求体携带JSON字符串
    语法:
const xhr = new XMLHttpRequest()
xhr.open('请求方法', '请求url地址')
xhr.addEventListener('loadend', () => {console.log(xhr.response)
})// 设置请求头,告诉服务器,我传递的内容类型,是JSON字符串
xhr.setRequestHeader('Content-Type','application/json')
// 准备数据并转成JSON字符串
const user = { username: '', password: ''}
const userStr = JSON.stringify(user)
// 发送请求体数据
xhr.send(userStr)

Promise

基本语法

Promise对象用于表示一个异步操作的完成(或失败)及其结果值
表示管理一个异步操作最终状态结果值的对象
语法:

// 1. 创建一个Promise对象
const p = new Promise((resolve,reject) => {// 2. 执行异步任务并传递结果// 成功调用resolve(值)  触发then()执行// 失败调用reject(值)  触发catch()执行
})
// 3. 接收结果
p.then(res => {// 成功
}).catch(error => {// 失败
})

Promise三种状态

待定pending:初始状态,既没有兑现,也没有拒绝
已兑现fulfilled:操作成功完成
已拒绝rejected:操作失败
【注意】:

  1. 对象一旦“已兑现”或“已拒绝”就不能再更改
  2. Promise对象创建时,里面的代码都会执行了

Promise链式调用

概念:依靠then()方法会返回一个新生成的Promise对象特性,继续串联下一个任务,直到结束
细节:then()回调函数中的返回值,会影响新生成的Promise对象最终状态和结果
好处:通过链式调用,解决回调函数嵌套的问题

eg:在这里插入图片描述

async函数和await

  1. 用法
    可以更简洁的写出基于Promise的异步行为
    概念:在async函数内,使用await关键字取代then函数,等待获取Promise对象成功状态的结果值
    eg:在这里插入图片描述

  2. 捕获错误

    try {// 可能发生错误的代码// 如果某行代码错误,后面的则不会执行
    }catch(error) {// 检测到错误后执行的代码
    }
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Chiplet SPI User Guide 详细解读
  • C/C++:和为给定数(二分查找,快速排序)
  • Docker 安全及日志管理(包含SSL证书)
  • Robot Operating System——内部审查(Introspection)Service
  • html笔记
  • python 面向对象基础
  • 虚拟局域网络(VLAN)详解
  • Windows NVM(Node Version Manager)使用指南
  • 【Javascript】前端面试基础2【每日学习并更新10】
  • openmv学习笔记(24电赛笔记)
  • 面完英伟达算法岗,心态崩了。。。
  • 【Python】快速创建一个简易 HTTP 服务器(http.server)
  • 《算法笔记》总结No.11——数字处理(上)欧拉筛选
  • 数据结构与算法-随机快速排序
  • Linux:bash在被调用时会读取哪些启动文件?
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Angular 2 DI - IoC DI - 1
  • angular2开源库收集
  • Fastjson的基本使用方法大全
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 汉诺塔算法
  • 前端之Sass/Scss实战笔记
  • 容器服务kubernetes弹性伸缩高级用法
  • 手写双向链表LinkedList的几个常用功能
  • 首页查询功能的一次实现过程
  • 微服务框架lagom
  • 应用生命周期终极 DevOps 工具包
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​1:1公有云能力整体输出,腾讯云“七剑”下云端
  • ​如何在iOS手机上查看应用日志
  • #pragma once与条件编译
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (Java数据结构)ArrayList
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (九)One-Wire总线-DS18B20
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (每日一问)基础知识:堆与栈的区别
  • (十六)串口UART
  • (转)linux 命令大全
  • (转)树状数组
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 4.0发布后不能正常显示图片问题
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET 表达式计算:Expression Evaluator
  • .net程序集学习心得
  • .NET和.COM和.CN域名区别
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .考试倒计时43天!来提分啦!
  • @AliasFor 使用
  • @Query中countQuery的介绍