promise封装ajax简单实现

2020-03-13  本文已影响0人  看到这朵小fa了么

全称AsynchronousJavaScriptXML,异步JavaScript和XML交互
一个ajax交互是从XMLHttpRequest对象开始的,将客户端执行的http请求解析为一个XML格式的服务器响应
1、创建一个XMLHttpRequest实例
2、使用HTTP方法来处理请求,并将目标的URL设置到XMLHttpRequest对象上
3、同时向XMLHttpRequest注册一个回调函数,异步的派发请求,这时控制权马上返回到浏览器,到服务器的请求到达,回调函数将被调用
4、将响应写回HttpServletResponse

ajax的机制是先定义响应函数,也就是onreaderstatechange函数来询问调用是否完成,当完成后会调用onread函数,对返回的结构进行一个包装和解析,之后才能发出请求。
ajax本身的状态和状态码

其中MIME(多功能网际邮件扩充协议),被定义在content-type中

function ajax(method, utl, params = {}) {
    return new Promise((resolve, reject) => {
        const xhr = new XMLHttpRequest()
        if (method === 'get' && params) {
            url = url.indexOf('?') > -1 ? url + params : url + `?${params}`
        }
        xhr.open(method, url)
        xhr.onreadystatechange(() => {
            if (xhr.readyState === 4 && xhr.stauts >= 200 && xhr.status < 300 || xhr.status === 304) {
                resolve(xhr.responseText)
            } else { reject(result) }
        })
        xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
        xhr.ontimeout(() => { reject(new TypeError('请求超时'))})
        if (method === 'post') { xhr.send(params) }
        else { xhr.send() }
    })
}
// key-value拼接
let dataString = ''
for (let key in params) {
    dataString += `${key}=${params[key]}`
}
上一篇 下一篇

猜你喜欢

热点阅读