自定义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:;bottom:;
left:;right:;
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:;
left:;
right:;
bottom:;
width:100%;
height:100%;
background-color: rgba(0,0,0,.5);
z-index:;
}
.loading>img{
position:absolute;
width:40px;
height:40px;
top:;
left:;
right:;
bottom:;
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()}
}
}

自定义ajax,添加loading效果的更多相关文章

  1. Vue通过状态为页面切换添加loading、为ajax加载添加loading

    以下方法需要引入vuex,另使用了vux的UI框架,ajax添加loading还引入了axios. 一.为页面切换添加loading. loading.js: import Vue from 'vue ...

  2. DataGrid点击上下一页loading效果

    js添加显示loading和取消loading方法 function showtbloading() { var target = $("#GridView1"); if (tar ...

  3. vue中iframe加载慢,给它加loading效果

    js框架:vue ui框架:element 因为iframe加载慢,所以在它加载完成前添加loading效果,loading用的是element家的加载效果 <template> < ...

  4. vue实现ajax滚动下拉加载,同时具有loading效果

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 自定义loading效果

    结合Font Awesome字体图标自定义loading效果 Font Awesome字体图标地址:http://www.fontawesome.com.cn/faicons/ 使用javascrip ...

  6. Android动画效果之自定义ViewGroup添加布局动画

    前言: 前面几篇文章介绍了补间动画.逐帧动画.属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来学习一下布局动画.本文将通 ...

  7. php+ajax实现登录按钮加载loading效果

    php+ajax实现登录按钮加载loading效果,一个提高用户体验,二个避免重复提交表单,ajax判断加载是否完成. 登录表单 <form onsubmit="return chec ...

  8. JQuery+CSS3实现Ajax加载时loading效果

    之前通过Ajax请求加载数据的时候,在数据还没有呈现出来前,为了更好的用户体验,总会弄个loading告诉用户其实内容正在加载,而不是网站崩了.但是貌似之前使用gif图片的情况比较多,可能是为了兼容各 ...

  9. ajax加载菊花loading效果

    Ajax异步请求的时候,一般都会利用一个动态的gif小图片来制作一个Ajax Loading,以便增加用户体验. 这里我们可以使用Spin.js,该js脚本压缩后5k,可以不用任何图片,任何外部CSS ...

随机推荐

  1. 解决jeesite开发java.lang.String cannot be cast to com.thinkgem.jeesite.modules.sys.security.SystemAuthorizingRealm$Principal问题

    解决jeesite问题java.lang.String cannot be cast to SystemAuthorizingRealm问题 这些天在jeesite项目上进行二次开发,遇到许多莫名其妙 ...

  2. MFC中cstring,string和char[]的相互转化

    int 转 CString:CString.Format("%d",int);...............................string 转 CString CSt ...

  3. Android-bindService远程服务启动其他应用的Activity

    Service2应用,在AndroidManifest.xml文件中对外暴露MyService2服务: <!-- 代表在应用程序里,当需要该service时,会自动创建新的进程. android ...

  4. Android之常用开发框架

    1.Rajawali介绍:安卓的OpenGL ES 2.0/3.0 引擎.可以用于制作普通应用或者动态壁纸,当然也可以用于制作游戏.项目地址: https://github.com/Rajawali/ ...

  5. IIS 7.5 使用appliaction Initialization

    https://blogs.msdn.microsoft.com/amol/2013/01/25/application-initialization-ui-for-iis-7-5/ 待续 正在测试 ...

  6. c#代码片段新建(sinppet)

    在c#里面我们经常用到 1.if 然后按2下Tab,出来下面一段代码 if (true) { } 2.propfull private int myVar; public int MyProperty ...

  7. Centos部署Abp zero常见问题及处理

    多租户切换,多语言切换异常 解决: 修改nginx配置,在nginx.conf中 增加 #多租户问题 ignore_invalid_headers off; 修改应用程序Logo异常处理 异常: Sy ...

  8. python 中使用 urllib2 伪造 http 报头的2个方法

    方法1. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #!/usr/bin/pyth ...

  9. [arc082f]Sandglass 递推

    Description 有一个沙漏由两个上下相通玻璃球A和B构成,这两个玻璃球都含有一定量的沙子,我们暂且假定AB中位于上方的玻璃球的为U,下方的玻璃球为L,则除非U中没有沙子,否则每秒钟都会有1克沙 ...

  10. ObjectARX二次开发创建自己的静态库,如同objectARX库一样

    objectARX二次开发的时候,经常会用到一些重复使用的类,如果类已经足够的好,那么我们可以编译成静态库,加快开发和编译的速度,提高工作效率. 环境vs2010+objectARX2012wizar ...