UNPKG

common-mini-components

Version:

公共组件

65 lines (60 loc) 2.45 kB
/** * 封装原生 XHRHttpReqest 对象请求数据 * @param { 请求路径 } url * @param { 请求方法 } method */ export function request (url: string, method: string, key: string) { return new Promise((resolve, reject) => { // 获取 XMLHttpRequest 对象的实例 const xhr = new XMLHttpRequest() /** * open 方法 接收三个参数 * 1、method 请求类型 * 2、url 请求地址 * 3、async 是否要异步发送请求,false 表示同步, true 表示异步 * 同步时,Javascript 在发送请求后继续等待浏览器的响应,不做其他操作 * 异步时,Javascript 在发送请求后会做其他操作,直到浏览器响应后,才 * 继续请求那边的操作 * 作用 * open 方法会启动一个针对 url 的请求 * 但不会真正的发送请求,只是启动状态,以备发送 */ xhr.open(method, url) // 必须先open才能设置请求头信息 xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8') // 设置 gaia key xhr.setRequestHeader('X-Gaia-Api-Key', key) /** * send 方法接收一个参数,该参数作为请求主体发送 * 由于该参数对于某些浏览器是必须的,所以不想 * 发送参数,可以传入 null */ xhr.send(null) /** * XMLHttpRequest 对象的 readyState 属性 * 表示请求/响应过程的当前活动阶段 * xhr.readyState 每次改变都会触发 onreadystatechange 事件 * 0:未初始化,尚未调用 open 方法 * 1:启动,已调用 open 方法,未调用 send 方法 * 2:发送,已调用 send 方法,但尚未接收到响应 * 3、接收,已接收到部分相应数据 * 4、完成,已接收到全部的响应数据,且可以在浏览器端使用了 */ xhr.onreadystatechange = function () { if (xhr.readyState === 4) { /** * http 状态码在 200 的区间都是请求成功的状态 * 状态码 304 表示缓存文件 */ if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { const data = JSON.parse(xhr.responseText) console.log(data) resolve(data) } else { console.log('request was unsuccessful:' + xhr.status) reject('请求出错了') } } } }) }