zoukankan      html  css  js  c++  java
  • 自定义ajax,添加loading效果 (ajax函数再次封装)

    自定义ajax

    /**
     * @desc 自定义ajax请求,添加等待gif
     */
    var n=0;
    $.defineAjax=function(obj){
        n++;
        if(!$('#loadingDiv')[0]){
            var str='<div id="loadingDiv"><img class="loadingImg" src="'+path+'/ui/common/img/loading.gif"></div>';
            $('body')[0].appendChild($(str)[0]);
        }
        if(typeof obj.success == 'function'){
            var fun=obj.success;
            obj.success=function(res){
                    if($('#loadingDiv')[0]){
                        $('#loadingDiv').remove();
                    }
                    fun(res);
            }
        }
        var opt={
            type:'post',
            data:{},
            dataType:'json',
            beforeSend:function(xhr){},
            complete:function(xhr,status){
                if(--n<=0){
                    $('#loadingDiv').remove();
                }
            }
        },option={};
        if(obj.beforeSend===undefined&&obj.complete===undefined){
            option=$.extend({},opt,obj);
        }
        setTimeout(function(){
            $.ajax(option);
        },200)    
    }

    关键能耗指标分析

    js:

    option为ajax里面的参数

    $.pageAjax=function(option){
        if(!$('div.page-loading')[0]){
            $('body').append('<div class="page-loading" style="display:none;"></div>');
        }
        $('div.page-loading').fadeIn(100);
        var op={
            type:"post",
            DataType:'json'
        },fn={
            success:function(res,mes){
                $('body').find('div.page-loading').fadeOut(100);
                if(typeof option.success==='function'){
                    option.success(res,mes);
                }
            },
            error:function(XHRObj,err,ext){
                $('body').find('div.page-loading').fadeOut(100);;
                if(typeof option.error==='function'){
                    option.error(XHRObj,err,ext);
                }
            }
        }
        var opt=$.extend({},op,option,fn);
        $.ajax(opt);
    }

    css

    div.page-loading{
        position: absolute;
        top:0;bottom:0;
        left:0;right:0;
        background: url('../img/page_loading.gif') no-repeat center center;
        margin:auto;
        width:65px;
        height:65px;
        border-radius: 50%;
    }

    调用:

    $.pageAjax(opt.ajax);

    效果:

    这种正常来说是ok的,单个请求的时候是不会有问题,但是如果有多个请求在发生,并且之前的请求还没有完成的时候,又进行下一个请求,这样就会存在问题

    修改:在每次请求之前记录请求的次数,请求之前加1,请求之后不管成功或者失败都减1,如果为0或者小于0,那么就隐藏loading

    js

    /*
    *ajax loading包装插件
    */
    $.pageAjax=function(option){
        var op={
            type:"post",
            DataType:'json'
        },fn={
            beforeSend:function(){
                var el=$('div.page-loading');
                if(!el[0]){
                    $('body').append('<div class="page-loading" data-times="1" style="display:block;"></div>');
                }else{
                    showOrHide(el,'+');
                }
                //每次只有要请求都要显示
                el.fadeIn(100);
            },    
            success:function(res,mes){
                showOrHide($('body').find('div.page-loading'),'-');
                if(typeof option.success==='function'){
                    option.success(res,mes);
                }
            },
            error:function(XHRObj,err,ext){
                showOrHide($('body').find('div.page-loading'),'-');
                if(typeof option.error==='function'){
                    option.error(XHRObj,err,ext);
                }
            }
        }
        var opt=$.extend({},op,option,fn);
        $.ajax(opt);
    }
    function showOrHide(el,p){
        var num=el.attr('data-times');
        if(isNaN(num)){num=0;}
        if(p=='+'){
            el.attr('data-times',++num);//注意此处是++num  ++i和i++的区别借鉴for循环的例子
        }else if(p=='-'){
            el.attr('data-times',--num);
            if(num<=0){
                el.fadeOut(100);
            }
        }
    }

    还有一种,直接方式,页面查询数据的时候调用显示的方法,成功或者失败的时候调用隐藏的方法

    调用显示:

    $("#searchbtn").off("click").on("click","",function(){
        $.fn.showorhideLoading.show();
        getChecknode();
    })

    调用隐藏

    function postAjaxData(param){
        //请求
        $.ajax({
            url:'/findEnergyDayTypeDataList',
            data:param,
            dataType:'json',
            success:function(data){
                $.fn.showorhideLoading.hide();//隐藏loading
                //处理数据
                var dataObj=initData(data.detail);
            },
            error:function(){
                $.fn.showorhideLoading.hide();//隐藏loading
            }
        })
    }

     html

    <div class="loading" style="display: none;"><img src="/static/ui/modules/systemMan/demo/img/loading.gif" alt=""></div>

    css

     /*loading效果*/
    .loading{
        position:fixed;
        top:0;
        left:0;
        right:0;
        bottom:0;
        width:100%;
        height:100%;
        background-color: rgba(0,0,0,.5);
        z-index: 999999;
    }
    .loading>img{
        position:absolute;
        width:40px;
        height:40px;
        top:0;
        left:0;
        right:0;
        bottom:0;
        margin:auto;
    }
        /**
         * 控制dialog的显示和隐藏
         */
        $.fn.showorhideLoading={
            show:function(id){
                if(id===undefined){
                    id="body";
                }
                //判断是否存在loading
                var el=$(id).find(".loading");
                if(!el[0]){
                    $(id).append(
                        '<div class="loading" style="display: block;">'+
                            '<img src="/static/ui/modules/systemMan/demo/img/loading.gif" alt="">'+
                        '</div>'
                    );
                }
                el.show()
            },
            hide:function(id){
                if(id===undefined){
                    id="body";
                }
                //判断是否存在loading
                var el=$(id).find(".loading");
                if(el){el.hide()}
            }
        }

     

  • 相关阅读:
    算法题之丢手绢问题
    Java接口成员变量和方法默认修饰符
    清空select下拉框的方法
    Java基础数据类型的默认值
    JVM内存区域划分
    Java中匿名内部类
    Java值传递
    部署web Service到tomcat
    Tomcat环境下配置数据源
    遇到和需要解决的问题
  • 原文地址:https://www.cnblogs.com/pengfei25/p/9165958.html
Copyright © 2011-2022 走看看