封装简化版的ajax
- 代码通过自定义的
myAxios 函数使用原生的 XMLHttpRequest 对象发送 HTTP GET 请求,并通过 Promise 对象封装异步操作。通过调用 then() 方法处理异步操作成功的结果,并将结果打印到控制台。
const api = 'http://ajax-api.itheima.net/api/news'
function myAxios(api) {
return new Promise((resolve,reject) => {
const xhr = new XMLHttpRequest()
xhr.open('get',api)
xhr.addEventListener('load',()=>{
if(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304){
resolve(JSON.parse(xhr.response))
}else{
reject('请求失败')
}
})
xhr.send()
})
}
myAxios(api).then(res => {
console.log(res)
})
- 上述代码定义了一个
myAxios 函数,用于发送 HTTP GET 请求获取数据。该函数接受一个 api 参数,表示要请求的 API 地址。
- 在
myAxios 函数中,首先创建了一个 Promise 对象,用于封装异步操作。在 Promise 的构造函数中,创建了一个 XMLHttpRequest 对象 xhr,用于发送 HTTP 请求。
- 通过
xhr.open('get', api) 方法,指定了 GET 请求的 URL,其中 api 是作为参数传入的 API 地址。
- 接着,通过添加事件监听器
xhr.addEventListener('load', ...) 来监听请求的 load 事件。在该事件回调函数中,首先判断响应状态码 xhr.status 是否为成功状态(200 到 299 或 304),如果是,则调用 resolve() 方法将响应的解析结果(通过 JSON.parse(xhr.response) 转换为 JavaScript 对象)作为 Promise 的成功结果进行返回。
- 如果响应状态码不在成功范围内,则调用
reject() 方法将字符串 '请求失败' 作为 Promise 的失败原因进行返回。
- 最后,通过
xhr.send() 方法发送请求。
- 在主程序中,调用
myAxios(api).then(...) 方法来发起异步请求并处理返回结果。当 Promise 对象成功执行时,触发 then() 方法中的回调函数,并将请求成功的结果 res 打印到控制台。