目录
- XMLHttpRequest
- 基本使用
- 查询参数
- 数据提交(注册账号)
- Promise
- 基本语法
- Promise三种状态
- Promise链式调用
- async函数和await
XMLHttpRequest
基本使用
XMLHttpRequest对象用于与服务器交互
与axios关系:axios内部采用XMLHttpRequest与服务器交互
请求少的时候,不引用axios直接用XMLHttpRequest可以减少代码体积
使用步骤:
- 创建XMLHttpRequest对象
- 配置请求方法和url地址
- 监听loadend事件(加载完成),接收相应结果
- 发起请求
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=值
数据提交(注册账号)
核心:
- 请求头设置Content-Type:application/json
- 请求体携带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:操作失败
【注意】:
- 对象一旦“已兑现”或“已拒绝”就不能再更改
- Promise对象创建时,里面的代码都会执行了
Promise链式调用
概念:依靠then()方法会返回一个新生成的Promise对象特性,继续串联下一个任务,直到结束
细节:then()回调函数中的返回值,会影响新生成的Promise对象最终状态和结果
好处:通过链式调用,解决回调函数嵌套的问题
eg:
async函数和await
-
用法
可以更简洁的写出基于Promise的异步行为
概念:在async函数内,使用await关键字取代then函数,等待获取Promise对象成功状态的结果值
eg: -
捕获错误
try { // 可能发生错误的代码 // 如果某行代码错误,后面的则不会执行 }catch(error) { // 检测到错误后执行的代码 }