前端工程化中对接口请求工具的封装

世上唯一不能复制的是时间,唯一不能重演的是人生,唯一不劳而获的是年龄。该怎么走,过什么样的生活,全凭自己的选择和努力。人生很贵,请别浪费!与智者为伍,与良善者同行。前端工程化中对接口请求工具的封装,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

引言

web项目对后台服务的请求一般使用jQuery.ajax axios等开源工具。在实际业务场景中需要对部分参数隐藏和统一处理。这就需要对开源工具类进行封装,并提供接口给其他方法调用,使得前端开发过程中不对源码修改就可以实现一部分业务、接口请求过程中的优化。

封装技巧

  • 对ajax请求过程增加遮罩层提示和关闭。使用全局变量loadingnum 计算实现开始和结束。loadingnum=0计算接口发起请求此时进行自增。在回调函数 jQuery.ajax.successjQuery.ajax.error 进行递减。当loadingnum重新为0关闭遮罩层。

  • 简化请求参数,对不同业务请求头进行封装并提供接口,如:ajaxUtil.postJsonjQuery.ajax 参数写死为 “post”, “json”,“application/json”。

  • 统一参数处理和优化。如接口请求超时间 timeout:60000。如对接口请求返回状态码 404 500 统一处理。

例子如下,使用requre.js定义模块:

define( {
    var ajaxUtil = {};
    var loadingnum = 0;
    /**
     * ajax postJson 封装
     * url 请求链接
     * fn 回调函数,返回调用结果
     * indata 入参
     * aysnc 同步 false 异步 false
    */
    ajaxUtil.postJson = function(url, fn, indata, async) {
        indata = { ROOT: { BODY: indata } };
        if (++loadingnum == 1) {
            //增加遮罩层提示 开始
        }

        ajaxUtil.base(
            url,
            "post",
            "json",
            function(resdata) {
                if (--loadingnum == 0) {
                    //增加遮罩层提示 结束
                }

                //统一异常处理
                if (data && data.retCode == "0001") {
                    //统一参数处理和优化。  进行错误提示
                } else {
                    fn(data);
                }
            },
            JSON.stringify(indata),
            async,
            "application/json"
        );
    };

    // ajax 基础封装
    ajaxUtil.base = function(url, method, type, fn, data, async, contentType) {
        var uri = new Uri(url);

        $.ajax({
            url: uri.toString(),
            type: method,
            async: async,
            contentType: contentType,
            cache: false,
            dataType: type,
            data: data,
            timeout: 60000,
            success: function(retdata) {
                fn(retdata);
            },
            error: function(XMLHttpRequestP, textStatusP, errorThrownP) {
                var data = {
                    result: XMLHttpRequestP,
                    retCode: "0001",
                    retMsg: "ajax调用失败"
                };
                fn(data);
            }
        });
    };
    return ajaxUtil;
});

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/222000.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!