自定义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. Python下载网页图片

    有时候不如不想输入路径,那就需要用os模块来修改当前路径 下面是从其他地方看到的一个例子,就是把图片url中的图片名字修改,然后就可以循环保存了,不过也是先确定了某个url 来源:http://www ...

  2. js 格式化时间

    //格式化时间 function time_format(time) { return new Date(parseInt(time) * 1000).toLocaleString().replace ...

  3. .net 任务(Task)

    1. Task (任务): 很容易调用 ThreadPool.QueueUserWorkItem 实现异步操作,但是这个技术有许多 .net 引入Task类型来使用任务. 如下几种方式都是实现异步的方 ...

  4. .net core 2.0 mvc 获取配置信息

    mvc_core_config *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 ...

  5. ASP.NET Web API总结

    1. 跨域 提供Http层的web api时,通常需要考虑跨域问题. 因为浏览器处于安全考虑,默认不允许前端页面向不是自己所在的ip/域名发起请求,因此需要服务器端指明自己允许部分或所有域名进行跨域请 ...

  6. SQLlite 分页

    如果我要去11-20的Account表的数据 Select * From Account Limit 9 Offset 10; 以上语句表示从Account表获取数据,跳过10行,取9行 嗯,我觉得这 ...

  7. python学习之路 六 :装饰器

    本节重点: 掌握装饰器相关知识 ​ python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函 ...

  8. Python【变量】

    本文介绍 1.Python运算符 运算符分类 运算符分为:算数运算.比较运算.逻辑运算.赋值运算.成员运算.身份运算.位运算 一.算数运算:返回数字 假设变量a=10,b=20 运算符: + 相加a+ ...

  9. c# 委托与事件的区别

    委托与事件的区别 委托和事件没有可比性,因为委托是数据类型,事件是对象(可以理解为对委托变量的封装.),下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别.事件的内部 ...

  10. 教你制作高逼格的技术分享Keynote(PPT)

    本文来自 网易云社区 . 作为一个程序猿/媛,想必大家都参与过大大小小各式各样的技术分享,异或在不同的场合分享自己的技术心得.抛开分享内容的质量不谈,笔者发现通常这些分享者的演示文稿(Keynot或P ...