当前位置: > > > jQuery - Ajax请求时自动显示Loading效果(设置全局加载框)

jQuery - Ajax请求时自动显示Loading效果(设置全局加载框)

    当我们在使用 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