封装最简化版的ajax

108 阅读1分钟

封装简化版的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.setRequestHeader(key,val)
            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)
        })
  1. 上述代码定义了一个 myAxios 函数,用于发送 HTTP GET 请求获取数据。该函数接受一个 api 参数,表示要请求的 API 地址。
  2. myAxios 函数中,首先创建了一个 Promise 对象,用于封装异步操作。在 Promise 的构造函数中,创建了一个 XMLHttpRequest 对象 xhr,用于发送 HTTP 请求。
  3. 通过 xhr.open('get', api) 方法,指定了 GET 请求的 URL,其中 api 是作为参数传入的 API 地址。
  4. 接着,通过添加事件监听器 xhr.addEventListener('load', ...) 来监听请求的 load 事件。在该事件回调函数中,首先判断响应状态码 xhr.status 是否为成功状态(200299304),如果是,则调用 resolve() 方法将响应的解析结果(通过 JSON.parse(xhr.response) 转换为 JavaScript 对象)作为 Promise 的成功结果进行返回。
  5. 如果响应状态码不在成功范围内,则调用 reject() 方法将字符串 '请求失败' 作为 Promise 的失败原因进行返回。
  6. 最后,通过 xhr.send() 方法发送请求。
  7. 在主程序中,调用 myAxios(api).then(...) 方法来发起异步请求并处理返回结果。当 Promise 对象成功执行时,触发 then() 方法中的回调函数,并将请求成功的结果 res 打印到控制台。