Q1:使用XMLHttpRequest来封装 AJAX,同时使用 Promise 进行封装:
function getJSON(url) {return new Promise((resolve, reject) => {// 1.创建 xhr 实例const xhr = new XMLHttpRequest();// 2.注册相关事件回调函数xhr.onreadystatechange = function() {if(xhr.readyState !== 4) returnif(xhr.status === 200 || xhr.status === 304) {resolve(xhr.responseText)} else {reject(new Error(xhr.responseText))}/*switch(xhr.readyState) {case 0:console.log("请求未初始化");break;case 1:console.log("OPENED");break;case 2:console.log("HEADERS_RECEIVED");break;case 3:console.log("LOADING");break;case 4:if(xhr.status === 200 || xhr.status === 304) {resolve(xhr.responseText)}console.log("DONE")break;default:reject(new Error(xhr.responseText))}*/}xhr.ontimeout = function(){} // 超时执行的回调函数xhr.onerror = function(){} // 网络请求出错执行的回调函数// 3.打开请求xhr.open("GET", url, true) // 创建一个 GET 请求,采用异步// 4.配置参数xhr.timeout = 3000xhr.setRequestHeader("Content-Type": "application/json")// 5.发送请求xhr.send()})}
