最后总结个Promise的get和post的请求方法 已封装好,用于utils.js
* 基于promise的ajax get请求 * @param {string} url 请求地址 * @param {object} query 请求要携带的参数 * @param {boolean} isJson 响应数据是否时json格式,默认为true fetch(url, query, isJson = true) { //定义函数fetch if (query) { //判断是否有参数传入 url += '?' //地址信息拼接 for (var key in query) { //把参数遍历出来进行拼接 url += `${key}=${query[key]}&` //参数拼接 } url = url.slice(0, -1) //去掉多余的拼接符号 } // 把这个promise的实例return出去,才能在调用位置.then return new Promise((resolve, reject) => { //重新定义一个promise,并且把值返回 var xhr = new XMLHttpRequest() //定义一个XMLHttpRequest()对象 xhr.open('get', url) //信息的获取方式 xhr.send() //信息传输 xhr.onreadystatechange = function() { //监视事件是否完成 if (xhr.readyState === 4) { //当当前文档的状态为4,也就是文档完成 if (xhr.status === 200) { //浏览器正常读取 var data = isJson ? JSON.parse(xhr.responseText) : xhr.responseText //判断是否为json语言 resolve(data) //承诺完成,输出data } else { reject() //承诺失败 } } } }) }, /** * ajax post请求 * @param {string} url 请求地址 * @param {object} query 请求要携带的参数 * @param {boolean} isJson 响应数据是否为json格式,默认为true */ fetchpost(url, query, isJson = true) { var str = '' if (query) { for (var key in query) { str += `&${key}=${query[key]}` } } return new Promise((resolve, reject) => { var xhr = new XMLHttpRequest() xhr.open('POST', url) //设置请求头,发送的数据类型为urlencoded xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded') xhr.send(str) xhr.onreadystatechange = function() { if (xhr.readyState === 4) { if (xhr.status === 200) { var data = isJson ? JSON.parse(xhr.responseText) : xhr.responseText resolve(data) } else { reject() } } } }) }