特点:
- 1:函数的返回值为promise,成功的结果为response,异常的结果为error
- 2:能处理多种类型的请求:GET,POST
- 3:函数的参数为一个配置对象
{
url:'',// 请求地址
method:'',// 请求方式GET POST PUT DELETE
params:{},GET/DELETE请求的query参数
data:{},// post或者delete请求的请求体参数
}
- 4:响应json数据自动解析为js
代码:
function axios({
url,
method = 'GET',
params = {},
data = {}
}) {
// 返回值是一个promsie对象
return new Promise((resolve, reject) => {
// 处理params参数 get请求的时候params参数拼接到url上
let queryStr = ''
Object.keys(params).forEach((key) => {
queryStr += `${key} = ${params[key]}&`
})
// 去除最后一个&
if (queryStr) {
queryStr = queryStr.substring(0, queryStr.length - 1)
URL += '?' + queryStr
}
// 执行异步ajax请求
const request = new XMLHttpRequest()
request.open(method, url, true)
if (method === 'GET') {
request.send()
} else if (method === 'POST') {
// 请求体中带json格式的参数时,必须加这个请求头。告诉服务器 请求体的格式是json格式
request.setRequestHeader('Content-Type', 'application/json;charset=utf-8')
request.send(JSON.stringify(data))
}
request.onreadystatechange = function () {
if (request.readyState === 4) {
if (request.status >= 200 && request.status < 300) {
// 响应的json自动转成js
// 执行成功了调用resolve()
const response = {
data:request.response,
status,
statusText
}
resolve(JSON.parse(response))
} else {
// 失败调用reject()
reject(new Error('MESSAGE'))
}
}else{
return
}
}
})
}