jQuery - Ajax请求时自动显示Loading效果(设置全局加载框)
作者:hangge | 2018-10-30 08:10
当我们在使用 Ajax 进行数据请求过程中,如果希望用户知道当前正在做这个事情,那就需要在页面上显示一个加载框(Loading 效果),然后等数据返回后自动将其隐藏。特别对于一些比较耗时的请求来说,这样做会大大提高用户体验。
要实现这个功能,我们可以在每次请求前手动显示个加载框,等收到数据后又将其隐藏。但如果每个请求要都这么做,就略显麻烦。下面通过样例演示如何全局为每一个请求附带一个 Loading 效果。
1,实现原理
(1)我们可以借助 jQuery 提供的 ajaxSetup() 方法来对 ajax 进行全局的设置。当请求开始时自动将 loading 框显示出来,等请求结束后自动将其隐藏。
(2)这里主要用到 ajaxSetup 中如下几个属性配置:
- beforeSend:发送请求前会执行(它会拦截所有的请求)。我们可以在此显示 loading 框。
- complete:请求完成时会执行(不管成功失败)。我们可以在此隐藏 loading 框。
- error:请求失败时会执行。我们可以在这里记录一些错误信息,或者弹出提示框告知用户。
2,样例代码
页面打开后,我们首先使用 ajaxSetup 进行全局配置,在请求前后自动进行提示框的显示或者隐藏。
Loading 效果我这里使用的是一个第三方的弹出层组件:layer。更详细的用法可以参考我之前写的文章:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="jquery-3.1.1.js" charset="utf-8"></script>
<script src="layer/layer.js"></script>
<script type="text/javascript">
//全局配置
$.ajaxSetup({
layerIndex:-1, //保存当前请求对应的提示框index,用于后面关闭使用
//在请求显示提示框
beforeSend: function(jqXHR, settings) {
this.layerIndex = layer.load(1);
},
//请求完毕后(不管成功还是失败),关闭提示框
complete: function () {
layer.close(this.layerIndex);
},
//请求失败时,弹出错误信息
error: function (jqXHR, status, e) {
layer.alert('数据请求失败,请后再试!');
}
});
//按钮点击响应
function btnClick() {
$.get("data.php", {name: "hangge"}, function(data){
console.log(data);
});
}
</script>
</head>
<body>
<input type="button" value="请求数据" onclick="btnClick()"/>
</body>
</html>
3,效果图
(1)点击“请求数据”按钮发起一个简单的 get 请求。
(2)可以看到请求时,页面中央会自动显示一个 loading 效果,并在数据返回后自动消失。

全部评论(0)