Promise封装ajax

1.先思考如何拿取异步对象中的属性?http状态码?

readyState属性都代表什么:
0:未初始化。尚未调用open()方法
1:启动。已经调用open()方法,但是未调用send()方法
2:发送。已经调用send()方法,但尚未接收到响应
3:接收。已经接收到部分响应数据
4:完成。已经接收到全部响应数据

如何拿数据
收到响应后,响应的数据会自动填充到 XMLHttp 对象的属性,
因此 readState、status 和 responseText 属性都要通过 XMLHttp 去拿,
而不是回调函数的参数(最好也不要用this)

status属性是什么
是http的状态码(status)
当满足status === 200这个条件时,就说明请求成功,并且拿到返回的数据

2.Promise 封装 Ajax

var  myAjax = function(url){
    return new Promise((resolve, reject) => {
        let xhr 
        // 1. 创建异步对象,并且兼容低版本IE
        if(window.XMLHttpRequest){
            xhr = new XMLHttpRequest()
        }else{
            xhr = new ActiveXObject("Microsoft.XMLHTTP")
        }
        // 2. 发送 GET 请求
        // 第三个参数表示是异步还是同步,true表示异步,false表示同步
        xhr.open('get', url, true)
        xhr.send()
        // 3. 监听状态的变化
        xhr.onreadystatechange = function(){
            if (xhr.readyState === 4 ) {
                // 4. 当满足下列条件,说明请求成功,并且拿到数据
                if (xhr.status === 200) {
                    // 成功时 接收返回的内容
                    resolve(this.responseText)
                } else {
                    // 失败时 接收返回的内容
                    var reason = { status: this.status, response: this.response }
                    reject(reason)
                }
            }
        }
    })
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值