/**
 * Created by 12398 on 2017/1/13.
 */
function XAjaxRequester() {
    this.tempSaveData = {};
}
XAjaxRequester.prototype = {
    get: function (url, data, successCallBack, failureCallBack) { //包含参数的url
        var _self = this;
        //请求数据 至少请求三次
        if (typeof data == "object") {
            url = this.encodeGetData(url, data);
        } else {
            console.error("传入参数格式错误!需要传入对象参数！");
            return;
        }
        var sendCount = 0;
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (this.readyState == 4) {
                if ((this.status >= 200 && this.status < 300) || this.status == 304) {
                    /* var res = JSON.parse(this.responseText);*/
                    var res = this.responseText;
                    if (typeof  successCallBack == "function") {
                        successCallBack(res);
                         _self.saveToLocalData(url, res);//加入缓存
                        //alert();

                    }
                } else {
                    if (++sendCount < 3) { //额外请求2次作为请求的补充
                        // alert(this.readyState);
                        // console.log(url);
                        xhr.open("get", url, true);
                        xhr.send(null);
                    } else {
                        if (typeof  failureCallBack == "function") {
                            failureCallBack();
                        }

                    }
                }
            }
        };

        if (data = this.getLocalStorage(url)) {
            successCallBack(data);
        } else {
            xhr.open("get", url, true);
            xhr.send(null);
        }
    },
    saveToLocalData: function (url, data) {
        if ( window.sessionStorage) {
            window.sessionStorage.setItem(url, data);
        } else {
            this.tempSaveData[url] = data; //加入缓存
        }

    },
    getLocalStorage: function (url) {
        if (window.sessionStorage) {
           return window.sessionStorage.getItem(url);
       } else {
            return this.tempSaveData[url]; //加入缓存
        }

    },

//ajax get请求参数encode处理
    encodeGetData: function (urlStr, dataObject) {

        for (var prop in dataObject) {
            var encodeProp = encodeURIComponent(prop);
            var encodeValue = encodeURIComponent(dataObject[prop]);
            urlStr += (urlStr.indexOf("?") == -1 ? "?" : "&");
            var dataStr = encodeProp + "=" + encodeValue;
            urlStr += dataStr;
        }
        return urlStr;
    },
    post: function (url, data, successCallBack, failureCallBack) {

        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (this.readyState == 4) {
                if ((this.status >= 200 && this.status < 300) || this.status == 304) {
                    if (typeof successCallBack == "function") {
                        successCallBack(this.responseText);
                    }
                } else {
                    if (typeof failureCallBack == "function") {
                        failureCallBack();
                    }
                }
            }
        };
        xhr.open("post", url, true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.send(data);
    },
//处理post data数据
    encodePostData: function (dataObj) {
        var dataStrArr = [];
        for (var prop in dataObj) {
            var property = encodeURIComponent(prop);
            var value = encodeURIComponent(dataObj[prop]);
            var dataStr = property + "=" + value;
            dataStrArr.push(dataStr);
        }
        return dataStrArr.join("&");
    }
//ajax get请求参数encode处理
};


//不包含缓存的ajax请求函数
AjaxObject = {
    // 回调函数可选 可不选
    get: function (url, data, successCallBack, failureCallBack) { //包含参数的url

        //请求数据 至少请求三次
        if (typeof data == "object") {
            url = this.encodeGetData(url, data);
        } else {
            console.error("传入参数格式错误!需要传入对象参数！");
        }
        var sendCount = 0;
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (this.readyState == 4) {
                if ((this.status >= 200 && this.status < 300) || this.status == 304) {
                    var res = JSON.parse(this.responseText);
                    if (typeof   successCallBack == "function") {
                        successCallBack(res);
                    }
                } else {
                    if (++sendCount < 3) { //额外请求2次作为请求的补充
                        // console.log(url);
                        xhr.open("get", url, true);
                        xhr.send(null);
                    } else {
                        if (typeof  failureCallBack == "function") {
                            failureCallBack();
                        }

                    }
                }
            }
        };
        xhr.open("get", url, true);
        xhr.send(null);

    },
//ajax get请求参数encode处理
    encodeGetData: function (urlStr, dataObject) {

        for (var prop in dataObject) {
            var encodeProp = encodeURIComponent(prop);
            var encodeValue = encodeURIComponent(dataObject[prop]);
            urlStr += (urlStr.indexOf("?") == -1 ? "?" : "&");
            var dataStr = encodeProp + "=" + encodeValue;
            urlStr += dataStr;
        }
        return urlStr;
    }

};
