编写一个ajax的loading插件,增强用户体验,点击按钮,发送ajax的过程中,按钮置灰禁用并呈现loading效果

7 篇文章 0 订阅
4 篇文章 0 订阅

虽然处在java的职位,但我忘不了我们学习的就是全栈开发工程师,这是我们的初心,在做好java的同时,当然也要兼顾好前端。

说起用户体验,后台的同学可能想到就是,使接口响应时间快一点,别随随便便就抛异常。但是别忘了,和用户关系最好的当然是前端。比如要上传一个比较大的文件,不管是form表单提交,还是使用ajax提交,可能因为文件较大,或者是网络延时,用户点击了提交或确定按钮的之后,文件io到后台我们的接口,我们的响应信息到达用户的浏览器之前,这段时间我们的浏览器应该是怎么样的呢?无任何变化吗?如果用户等的时间较长,他会不会再次点击一下提交按钮的,如果用户比较狂躁,狂点我们的提交按钮怎么办呢?

 做文件上传的时候,如果文件比较大,可以在用户点击提交按钮后,添加进度条,具体做法请参考下我之前的文章:

jquery前端文件上传进度条(非插件),spring boot文件上传实时进度条,主要代码ajax

进入正题,ajax时的loading效果,先看实现效果吧 :

点击确定按钮之后,按钮的内容改变为iconfont的小圆圈,并且是旋转的。服务器给出响应之后,浏览器在做响应的操作,或是启用按钮,或是跳转页面。

下面是实现主要代码:

loading.js,loading.css,iconfont.js三个文件

var doAjax;
var loadingIcon;
var btnDoAjax;
var fullAjax;
//计算当前js的路径
var script = $("script");
var source;
$.each(script, function(i, js) {
	var src = js.src;
	if(src.indexOf("loading.js") > 0) {
		source = src.replace("loading.js", "");
		return false;
	}
});
var link = $('<link>');
link.attr({"rel":"stylesheet","type":"text/css","href":source+"loading.css"});
$('head').append(link);
$.getScript(source+"iconfont.js",function(){
	loadingIcon = $('<svg class="icon" id="loading" style="width:1.1em;height:1.1em;vertical-align: -0.15em;" aria-hidden="true"><use xlink:href="#iconloading"></use></svg>')
	doAjax = function(method,url,data,callback,target){
		var fun_cache= $._data(target.get(0),'events');
		var oldText = target.text();
		var hasClick = false;
		var click_arr = [];
		if(fun_cache != undefined){
			if('click' in fun_cache){
				click_arr = fun_cache.click
				hasClick = true;
				//禁用元素的点击事件
				$._data(target.get(0),'events')['click'] = undefined;
				target.css("opacity",0.5).html(loadingIcon);
			}
		}
		$.ajax(url,{
			type:method,
			data:data,
			success:function(data){
				//启用元素的点击事件
				if(hasClick){
					$._data(target.get(0),'events')['click'] = click_arr;
					target.css("opacity",1).text(oldText);
				}
				callback(data);
			}
		});
	}
	btnDoAjax = function(method,url,data,callback,target){
		var oldText = target.text();
		//禁用元素的点击事件
		target.css("opacity",0.5).html(loadingIcon).prop("disabled","true");
		$.ajax(url,{
			type:method,
			data:data,
			success:function(data){
				//启用元素的点击事件
				target.css("opacity",1).text(oldText).prop("disabled","false");
				callback(data);
			}
		});
	}
	fullAjax = function(params,target,callback){
		var oldText = target.text();
		//禁用元素的点击事件
		target.css("opacity",0.5).html(loadingIcon).prop("disabled","true");
		var oldSuccess = params.success;
		params.success = function(data){
			//启用元素的点击事件
			target.css("opacity",1).text(oldText).removeAttr("disabled");
			oldSuccess(data);
			if(typeof(callback) === "function"){
				callback();
			}
		}
		$.ajax(params);
	}
})

 这个css就是为了让图标转动起来:

#loading{
	animation:loading 2s linear infinite
}
@keyframes loading{
	0%{
		transform:rotate(0deg);
	}
	100%{
		transform:rotate(360deg);
	}
}

主要思路是将ajax方法包装起来,这样我们引入这个文件,调用的时候这样调用:

var params = {
                type: "POST",
                url: baseURL + url,
                contentType: "application/json",
                data: JSON.stringify(vm.dept),
                success: function(r){
                    if(r.code === 0){
                        layer.msg('操作成功',{icon:6});
                        vm.reload();
                    }else{
                        layer.msg(r.msg,{icon:5});
                    }
                }
            }
            fullAjax(params,$("#subBtn"));

这里我就展示这个fullAjax怎么使用,上面两个方法有点js基础的同学很容易就可以看懂,也会理解怎么用。

需要源码的同学可以点下面的连接进行下载,没有积分的可以私信我哦!

ajax-loading插件,增强用户体验

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用户点击导入按钮时,您可以使用 JavaScript 发送 AJAX 请求来执行相应的操作。以下是一个示例: ```html <!DOCTYPE html> <html> <head> <title>点击导入按钮发送 AJAX 请求示例</title> </head> <body> <button onclick="importData()">导入数据</button> <script> function importData() { var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://example.com/import', true); // 设置请求的 URL xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE) { if (xhr.status === 200) { // 请求成功处理逻辑 console.log(xhr.responseText); } else { // 请求失败处理逻辑 console.error('请求失败'); } } }; xhr.send(); } </script> </body> </html> ``` 在上述示例,我创建了一个按钮,并将其绑定到 `importData()` 函数上。在函数,我使用 `XMLHttpRequest` 对象创建了一个 AJAX 请求。我设置了请求的方法为 `POST`,并指定了请求的 URL。您需要将 `https://example.com/import` 替换为实际的请求地址。 然后,我通过设置 `onreadystatechange` 事件处理程序来监听请求的状态变化。当请求的状态变为 `XMLHttpRequest.DONE`,即完成状态时,我检查响应的状态码。如果状态码为 200,表示请求成功,您可以在处理逻辑执行相应的操作。如果状态码不是 200,则表示请求失败,您可以在错误处理逻辑进行相应的处理。 最后,我使用 `send()` 方法发送 AJAX 请求。请注意,如果您需要在请求传递数据,可以在 `send()` 方法作为参数传递。 请根据您的实际需求修改示例的请求方法、URL、成功和失败处理逻辑,并根据需要将数据作为参数传递给 `send()` 方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值