/*
职责链模式:
解决请求的发送者与请求的接受者之间的耦合,通过职责链上的多个对象对分解请求流程,实现请求在多个对象之间的传递,直到最后一个对象完成请求的处理。
 */

// 第一站 请求模块
var sendData = function (data, dealType, dom) {
    var xhr = new XMLHttpRequest();
    var url = 'getData.php?mod=userInfo';
    xhr.onload = function (event) {
        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {
            dealData(xhr.responseText, dealType, dom);
        } else {
            // 请求失败
        }
    }
    for (var i in data) {
        url += '&' + i + '=' + data[i];
    }
    xhr.open("get", url, true);
    xhr.send(null);
};

// 第二站 处理数据
var dealData = function (data, dealType, dom) {
    var dataType = Object.prototype.toString.call(data);
    switch (dealType) {
        case 'sug':
            if (dataType === "[object Array]") {
                return createSug(data, dom);
            }
            if (dealType === "[object Object]") {
                var newData = [];
                for (var i in data) {
                    newData.push(data[i]);
                    return createSug(newData, dom);
                }
            }
            return createSug([data], dom);
            break;
        case 'validate':
            return createValidataResult(data, dom);
            break;
    }
};

// 第三站 创建组件模块
var createSug = function (data, dom) {
    var i = 0;
    len = data.length;
    html = '';
    for (; i < len; i++) {
        html += '<li>' + data[i] + '</li>';
    }
    dom.parentNode.getElementsByTagName('ul')[0].innerHTML = html;
};
var createValidataResult = function (data, dom) {
    dom.parentNode.getElementsByTagName('span')[0].innerHTML = data;
};