document.write('<script src="./js/api.js"></script>');

function Ajax(param = {}) {
    let eparam = {
        type: param.type || 'get',
        url: param.url || '',
        data: param.data || {},
        noCheck: param.noCheck || false,
        success: param.success || function () {

        },
        error: param.error || function () {

        },
        failed: param.failed || function () {

        }
    };

    if (!eparam.url) throw 'Ajax方法传入对象必须有url路径';

    // 创建ajax对象
    let xhr = null;
    if (window.XMLHttpRequest) {
        xhr = new XMLHttpRequest();
    } else {
        xhr = new ActiveXObject('Microsoft.XMLHTTP')
    }

    eparam.type = eparam.type.toUpperCase();

    if (typeof eparam.data === 'object') {
        let str = '';
        for (let key in eparam.data) {
            str += key + '=' + eparam.data[key] + '&';
        }
        eparam.data = str.replace(/&$/, '');
    }

    if (eparam.type === 'GET') {
        if (eparam.data) {
            xhr.open('GET', eparam.url + '?' + eparam.data, true);
        } else {
            xhr.open('GET', eparam.url + '?t=' + Math.random(), true);
        }
        xhr.send();

    } else if (eparam.type === 'POST') {
        xhr.open('POST', eparam.url, true);
        // 如果需要像 html 表单那样 POST 数据，请使用 setRequestHeader() 来添加 http 头。
        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhr.send(eparam.data);
    }

    // 处理返回数据
    xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
            if (xhr.status === 200) {
                const data = typeof xhr.responseText === 'string' ? JSON.parse(xhr.responseText) : xhr.responseText;
                if (data.status === '1' || eparam.noCheck) {
                    typeof eparam.success === "function" && eparam.success(data.data);
                } else {
                    typeof eparam.error === "function" && eparam.error(data);
                }
            } else {
                typeof eparam.failed === "function" && eparam.failed(xhr.status);
            }
        }
    }
}

// 测试调用
// var sendData = { name: 'asher', sex: 'male' };
// Ajax('get', 'data/data.html', sendData, function(data) {
//     log(data);
// }, function(error) {
//     log(error);
// });