NeailWiki

Because Change Happens.
JavaScript

Ajax

function ajax(type, url, data = {}) {
    return new Promise((resolve) => {
        // 创建对象(兼容IE)
        let xhr =  XMLHttpRequest 
        ? new XMLHttpRequest() 
        : new ActiveXObjece('Microsoft.XMLHTTP');
        type = type.toUpperCase();
        // 处理参数
        let dataArr = [];
        for(let k in data) {
            dataArr.push(`${k}=${data[k]}`)
        }
        // get请求
        if (type === 'GET') {
            url = `${url}?${dataArr.join('&')}`;
            xhr.open(type, url.replace(/\?$/g, ''), true);
            xhr.send();
        }
        // post请求
        if (type === 'POST') {
            xhr.open(type, url, true);
            xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            xhr.send(dataArr.join('&'))
        }
        // 请求成功触发后交付数据
        xhr.onload = function() {
            let res = {};
            res.status = xhr.status;
            res.data = JSON.parse(xhr.responseText);
            resolve(res)
        }
    })
}
ajax('get', 'https://api.github.com/').then((res) => {
    console.log(res.data);
})

# readyState

状态描述
0UNSENT请求未初始化,open() 未调用
1OPENED服务器连接已连接,但还未发送请求
2HEADERS_RECEIVED已经收到了响应头,但还未收到响应主体
3LOADING正在接收响应主体,但还未完成
4DONE整个请求完成

# 事件处理程序

事件描述
onabort当请求终止时触发
onload当请求成功时触发
onloadend当请求成功或失败时触发; after load,abort,error,timeout
onloadstart当请求开始时触发
onreadystatechange当 readyState 属性改变时触发
ontimeout当 timeout 属性指定的时间已经过去后触发
onerror请求因错误失败时触发
onprogress当响应主体正在下载重复触发 (50ms interval)
# ref

Last Update: 2019-12-06 12:55:40 Source File