03-http.js 4.82 KB
/**
 * auth : iMethod
 * create_at: 15/10/13.
 * desc:
 * note:
 *  1.
 */
(function ($w, $) {
    $w.gxb = {}
    $w.gxb._ = {}
    $w.gxb.http = $w.gxb._.http = {
        resloveUrl: function (url) {
            return url;
            // var noContextPath = $w.gxb.contextPath == "/";
            // return (noContextPath ? "" : $w.gxb.contextPath) + (url.indexOf("/") == 0 ? "" : "/") + url;
        },
        GetQueryString: function (name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
            var r = window.location.search.substr(1).match(reg);
            if (r != null)return unescape(r[2]);
            return null;
        }
    }
    $w.gxb._.ajaxs = {
        _: {},
        push: function (id, xhr) {
            $w.gxb._.ajaxs._[id] = xhr;
        },
        pop: function (id) {
            $w.gxb._.ajaxs._[id] = null;
        },
        get: function (id) {
            return $w.gxb._.ajaxs._[id];
        }
    };
    $w.gxb._.ajax = function (url, options) {
        if (typeof url == "object") {
            options = url;
            url = null;
        }
        var def = {
            url: url || options.url || "",
            type: "get",
            dateType: "html",
            data: {}
        };
        options = $.extend(def, options);
        url = options.url;
        while (url[0] == "/" || url[0] == " ") {
            url = url.substring(1, url.length);
        }

        if (url.length == 0) {
            $w.console.log("无效的请求地址");
            return null;
        }
        var newUrl = url.toLowerCase();

        if (newUrl.indexOf(".js") < 0 && newUrl.indexOf(".css") < 0) {
            var sIndex = newUrl.indexOf("?");
            if (sIndex > 0) {
                url = url.substring(0, sIndex) + "/api" + url.substring(sIndex)+"&"+new Date().getTime();
            }
            else {
                url += "/api"+"?"+new Date().getTime()
            }
        }

        var seq = function () {
            var _id;
            do {
                _id = Math.random() + "00000000";
                _id = _id.substr(_id.indexOf(".") + 1, 6);
            } while (!!$w.gxb._seq[_id]);
            $w.gxb._seq[_id] = !0;
            return _id;
        }

        var params = {
            url: $w.gxb._.http.resloveUrl(url),
            data: options['data'] || {},
            dateType: options['dateType'] || "html",
            contentType: typeof(options["contentType"]) != 'undefined' && options["contentType"] != null ? options["contentType"] : "application/x-www-form-urlencoded;charset=utf-8",
            type: options['type'] || 'get',
            processData: typeof(options["processData"]) != 'undefined' && options["processData"] != null ? options['processData'] : true,
            cache: typeof(options["cache"]) != 'undefined' && options["cache"] != null ? options['cache'] : true,
            complete: function (response) {
                var complete = options['complete'];
                if (typeof complete == "function") {
                    complete(response)
                }
                $w.gxb._.ajaxs.pop(seq);
            },
            success: function (response) {
                var success = options['success'];
                if (typeof success == "function") {
                    success(response)
                }
            },
            error: function (response) {
                var error = options['error'];
                var getResponse = function () {
                    if (response && response.status == 500) {
                        try {
                            var json = gxb.utils.toJsonObj(response.responseText);
                        }
                        catch (ex) {
                            var json = {};
                        }
                        return {
                            status: false,
                            message: json.message || "发生未知异常!",
                            type:json.type
                        }
                    }else if(response.status==403){
                        return {
                            status: false,
                            message: "您没有访问权限!"
                        }
                    }else {
                        return {
                            status: false,
                            message: "发生未知异常!"
                        }
                    }
                }
                if (typeof error == "function") {
                    error(getResponse(response));
                } else {
                    var resData = getResponse(response)
                    console.log(resData.message)
                }
            }
        };
        var $ajax = $.ajax(params);
        return {
            abort: function () {
                $ajax.abort();
            }
        };
    };
})(window, jQuery);