当前位置 : 主页 > 网络编程 > JavaScript >

EasyAjax ,封装jq的ajax

来源:互联网 收集:自由互联 发布时间:2021-06-28
EasyAjax ,封装jq的ajax var EasyAjax = {}; var _ajaxType = ['get', 'POST', 'put', 'delete', 'options', 'head', 'connect', 'trace']; var _ajaxDataType = ['json', 'xml', 'html', 'script']; var _ajaxContentType = ["application/json", "applic
EasyAjax ,封装jq的ajax
var EasyAjax = {};
    var _ajaxType = ['get', 'POST', 'put', 'delete', 'options', 'head', 'connect', 'trace'];
    var _ajaxDataType = ['json', 'xml', 'html', 'script'];
    var _ajaxContentType = ["application/json", "application/x-www-form-urlencoded"];
	
    /**
     * Ajax Get请求
     * @param config Ajax需要参数
     * @param callback ajax结束回调函数
     */
    EasyAjax.get = function (config, callback) {
        config.type = _ajaxType[0];
        _ajax(config, callback);
    };

    /**
     * Ajax Post请求
     * @param config Ajax需要参数
     * @param callback ajax结束回调函数
     */
    EasyAjax.post = function (config, callback) {
        config.type = _ajaxType[1];
        _ajax(config, callback);
    };
	
    /**
     * Ajax Get请求数据格式是JSON
     * @param config Ajax需要参数可只配URL
     * @param callback ajax结束回调函数
     */
    EasyAjax.get_json = function (config, callback) {
        config.type = _ajaxType[0];
        config.dataType = _ajaxDataType[0];
        _ajax(config, callback);
    };

    /**
     * 文件上传Ajax
     * @param config ajax配置项
     * @param callback 回调函数
     */
    EasyAjax.upload_file = function (config, callback) {
        config.type = _ajaxType[1];
        config.dataType = _ajaxDataType[0];
        config.cache = false;
        config.contentType = false;
        config.processData = false;
        _ajax(config, callback);
    };
	
    /**
     * 根据dom元素上传文件
     * @param config
     * @param callback  回调函数
     * @param elem 文件dom id or class
     */
    EasyAjax.Upload_File_Elem = function (config, callback) {
        var file = $(config.elem).get(0).files[0];
        var fileData = new FormData();
        fileData.append("file", file);
        config.type = _ajaxType[1];
        config.dataType = _ajaxDataType[0];
        config.cache = false;
        config.contentType = false;
        config.processData = false;
        config.data = fileData;
        config.shade = 0.6;
        _ajax(config, callback);
    };
	
    /**
     * Ajax post请求数据格式是JSON,接口使用@RequestParam时使用,使用form表单提交方式
     * @param config Ajax需要参数可只配URL
     * @param callback ajax结束回调函数
     */
    EasyAjax.post_form_json = function (config, callback) {
        config.type = _ajaxType[1];
        config.dataType = _ajaxDataType[0];
        if (!config.contentType) {
            config.contentType = _ajaxContentType[1];
        }
        _ajax(config, callback);
    };

    /**
     * Ajax post请求数据格式是JSON
     * 接口使用@RequestBody时使用自动添加contentType以及格式化参数
     * @param config Ajax需要参数可只配URL
     * @param callback ajax结束回调函数
     */
    EasyAjax.post_json = function (config, callback) {
        config.type = _ajaxType[1];
        config.dataType = _ajaxDataType[0];
        if (!config.contentType) {
            config.contentType = _ajaxContentType[0];
        }
        if (config.contentType == 'application/json') {
            config.data = JSON.stringify(config.data);
        }
        _ajax(config, callback);
    };

	/**
	* 发送请求
	*/
    function _ajax(config, callback) {
		var loading;
		
        $.ajax({
            url: config.url,
            type: config.type,
            data: config.data,
            dataType: config.dataType,
            contentType: config.contentType,
            timeout: config.timeout,
            async: config.async,
            cache: config.cache,
            processData: config.processData,
            beforeSend: function () {
                //todo 此处可以写加载中动画……
                if(config.loading_msg){
                    loading = layui.layer.msg(config.loading_msg,{icon: 16,time:3000,shade:config.shade});
                }else{
                    loading = layui.layer.msg('数据提交中,请稍候',{icon: 16,time:3000,shade:config.shade});
                }
            },
            success: function (json) {
                var status = _handleStatus(json);
                if(status==false) return false;

				/* 其他返回回调 */
                (callback && typeof (callback) === "function") && callback(json);
                
            },
            error: function (XMLHttpRequest) {
                alert('网络超时')
            },
            complete: function () {
                // todo 关闭动画处理……
				layui.layer.close(loading);
            }
        });
    }

    function _handleStatus(json) {
        var status = true;
        switch(json.ret){
            case 401:
                /* 公用 token 错误 */
                status = false;
                layui.layer.alert('刷新后重试',function(){window.location.reload();});
                break;
            case 402:
                /* 登录超时 */
                status = false;
                layui.layer.alert('需要重新登录',function(){SSO_login.logout(true);});
                break;
            case 404:
                /* 无数据 */
                status = false;
                layui.layer.msg('无数据');
                break;
            case 500:
                /* 服务器内部错误 */
                status = false;
                layui.layer.msg('内部未知错误');
                break;
            case 901:
            case 902:
                /* 账号封停 */
                layui.layer.msg('您的账号已被封停');
                break;

        }
        return status;
    }

    window.EasyAjax = EasyAjax;
上一篇:懒加载小工具
下一篇:jquery实现倒计时
网友评论