手写 axios
function axios(config) {
let {
url,
method = 'GET',
params = {},
data = {}
} = config
return new Promise((resolve, reject) => {
method = method.toUpperCase()
let queryStr = ""
for (let key in params) {
queryStr += `${key}=${params[key]}&`
}
if (queryStr) queryStr = queryStr.substring(0, queryStr.length - 1)
data = JSON.stringify(data)
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = () => {
if (xhr.readyState !== 4) return
if (xhr.status >= 200 && xhr.status <= 299) {
const { status, statusText, response } = xhr
resolve({
status,
statusText,
data: JSON.parse(response)
})
} else {
reject(new Error('请求失败'))
}
}
if (method == 'GET') {
xhr.open(method, url + "?" + queryStr)
xhr.send()
} else {
xhr.open(method, url)
xhr.setRequestHeader("Content-Type", "application/json")
xhr.send(data)
}
})
}
export default axios