Implement a loading indicator for a jQuery AJAX call

前端 未结 6 1394
我在风中等你
我在风中等你 2020-12-04 05:54

I have a Bootstrap modal which is launched from a link. For about 3 seconds it just sits there blank, while the AJAX query fetches the data from the database. How can I impl

相关标签:
6条回答
  • 2020-12-04 06:03

    There is a global configuration using jQuery. This code runs on every global ajax request.

    <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/

    0 讨论(0)
  • 2020-12-04 06:12

    I solved the same problem following this example:

    This example uses the jQuery JavaScript library.

    First, create an Ajax icon using the AjaxLoad site.
    Then add the following to your HTML :

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

    And the following to your CSS file:

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

    Lastly, you need to hook into the Ajax events that jQuery provides; one event handler for when the Ajax request begins, and one for when it ends:

    $(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

    0 讨论(0)
  • 2020-12-04 06:17

    This is how I realised the loading indicator by an 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>
    
    0 讨论(0)
  • 2020-12-04 06:19

    I'm guessing you're using jQuery.get or some other jQuery ajax function to load the modal. You can show the indicator before the ajax call, and hide it when the ajax completes. Something like

    $('#indicator').show();
    $('#someModal').get(anUrl, someData, function() { $('#indicator').hide(); });
    
    0 讨论(0)
  • 2020-12-04 06:19

    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.

    0 讨论(0)
  • 2020-12-04 06:20

    A loading indicator is simply an animated image (.gif) that is displayed until the completed event is called on the AJAX request. http://ajaxload.info/ offers many options for generating loading images that you can overlay on your modals. To my knowledge, Bootstrap does not provide the functionality built-in.

    0 讨论(0)
提交回复
热议问题