简体   繁体   English

为jQuery AJAX调用实现加载指示器

[英]Implement a loading indicator for a jQuery AJAX call

I have a Bootstrap modal which is launched from a link. 我有一个从链接启动的Bootstrap模式。 For about 3 seconds it just sits there blank, while the AJAX query fetches the data from the database. 大约3秒钟它只是空白,而AJAX查询从数据库中获取数据。 How can I implement some sort of a loading indicator? 如何实现某种加载指示器? Does twitter bootstrap provide this functionality by default? twitter bootstrap是否默认提供此功能?

EDIT: JS code for modal 编辑:模态的JS代码

<script type="text/javascript">
  $('#myModal').modal('hide');
  $('div.divBox a').click(function(){
    var vendor = $(this).text();
    $('#myModal').off('show');
    $('#myModal').on('show', function(){             
      $.ajax({
        type: "GET",
        url: "ip.php",
        data: "id=" + vendor,
        success: function(html){
          $("#modal-body").html(html);
          $(".modal-header h3").html(vendor);
          $('.countstable1').dataTable({
            "sDom": "T<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
            "sPaginationType": "bootstrap",
            "oLanguage": {
              "sLengthMenu": "_MENU_ records per page"
            },
            "aaSorting":[[0, "desc"]],
            "iDisplayLength": 10,
            "oTableTools": {
              "sSwfPath": "swf/copy_csv_xls_pdf.swf",
              "aButtons": ["csv", "pdf"]
            }
          });
        }
      });
    });
  });
  $('#myModal').on('hide', function () {
    $("#modal-body").empty();
  });
</script>

I solved the same problem following this example: 我按照这个例子解决了同样的问题:

This example uses the jQuery JavaScript library. 此示例使用jQuery JavaScript库。

First, create an Ajax icon using the AjaxLoad site . 首先,使用AjaxLoad站点创建Ajax图标。
Then add the following to your HTML : 然后将以下内容添加到HTML中:

<img src="/images/loading.gif" id="loading-indicator" style="display:none" />

And the following to your CSS file: 以下是您的CSS文件:

#loading-indicator {
  position: absolute;
  left: 10px;
  top: 10px;
}

Lastly, you need to hook into the Ajax events that jQuery provides; 最后,您需要挂钩jQuery提供的Ajax事件; one event handler for when the Ajax request begins, and one for when it ends: Ajax请求开始时的一个事件处理程序,以及结束时的一个事件处理程序:

$(document).ajaxSend(function(event, request, settings) {
    $('#loading-indicator').show();
});

$(document).ajaxComplete(function(event, request, settings) {
    $('#loading-indicator').hide();
});

This solution is from the following link. 此解决方案来自以下链接。 How to display an animated icon during Ajax request processing 如何在Ajax请求处理期间显示动画图标

I'm guessing you're using jQuery.get or some other jQuery ajax function to load the modal. 我猜你正在使用jQuery.get或其他一些jQuery ajax函数来加载模态。 You can show the indicator before the ajax call, and hide it when the ajax completes. 您可以在ajax调用之前显示指示符,并在ajax完成时隐藏它。 Something like 就像是

$('#indicator').show();
$('#someModal').get(anUrl, someData, function() { $('#indicator').hide(); });

There is a global configuration using jQuery. 有一个使用jQuery的全局配置。 This code runs on every global ajax request. 此代码在每个全局ajax请求上运行。

<div id='ajax_loader' style="position: fixed; left: 50%; top: 50%; display: none;">
    <img src="themes/img/ajax-loader.gif"></img>
</div>

<script type="text/javascript">
    jQuery(function ($){
        $(document).ajaxStop(function(){
            $("#ajax_loader").hide();
         });
         $(document).ajaxStart(function(){
             $("#ajax_loader").show();
         });    
    });    
</script>

Here is a demo: http://jsfiddle.net/sd01fdcm/ 这是一个演示: http//jsfiddle.net/sd01fdcm/

A loading indicator is simply an animated image (.gif) that is displayed until the completed event is called on the AJAX request. 加载指示器只是一个动画图像(.gif),直到在AJAX请求上调用完成的事件为止。 http://ajaxload.info/ offers many options for generating loading images that you can overlay on your modals. http://ajaxload.info/提供了许多用于生成加载图像的选项,您可以将这些图像覆盖在模态上。 To my knowledge, Bootstrap does not provide the functionality built-in. 据我所知,Bootstrap不提供内置功能。

This is how I got it working with loading remote content that needs to be refreshed: 这就是我如何使用它来加载需要刷新的远程内容:

$(document).ready(function () {
    var loadingContent = '<div class="modal-header"><h1>Processing...</h1></div><div class="modal-body"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>';

    // This is need so the content gets replaced correctly.
    $("#myModal").on("show.bs.modal", function (e) {
        $(this).find(".modal-content").html(loadingContent);        
        var link = $(e.relatedTarget);
        $(this).find(".modal-content").load(link.attr("href"));
    });    

    $("#myModal2").on("hide.bs.modal", function (e) {
        $(this).removeData('bs.modal');
    });
});

Basically, just replace the modal content while it's loading with a loading message. 基本上,只需在加载消息时替换模态内容。 The content will then be replaced once it's finished loading. 一旦完成加载,内容将被替换。

This is how I realised the loading indicator by an Glyphicon: 这是我通过Glyphicon实现加载指示器的方式:

<!DOCTYPE html>
<html>

<head>
    <title>Demo</title>

    <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css">
    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js"></script>

    <style>
        .gly-ani {
          animation: ani 2s infinite linear;
        }
        @keyframes ani {
          0% {
            transform: rotate(0deg);
          }
          100% {
            transform: rotate(359deg);
          }
        }
    </style>  
</head>

<body>
<div class="container">

    <span class="glyphicon glyphicon-refresh gly-ani" style="font-size:40px;"></span>

</div>
</body>

</html>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM