JQuery AJAX çağrısı için bir yükleme göstergesi uygulama


88

Bir bağlantıdan başlatılan bir Bootstrap modelim var. AJAX sorgusu verileri veritabanından alırken yaklaşık 3 saniye boş kalır. Bir çeşit yükleme göstergesi nasıl uygulayabilirim? Twitter önyüklemesi bu işlevi varsayılan olarak sağlıyor mu?

DÜZENLEME: modal için JS kodu

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

Yanıtlar:


40

Modal'ı yüklemek için jQuery.get veya başka bir jQuery ajax işlevini kullandığınızı tahmin ediyorum. Göstergeyi ajax çağrısından önce gösterebilir ve ajax tamamlandığında gizleyebilirsiniz. Gibi bir şey

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

164

Bu örnekten sonra aynı sorunu çözdüm:

Bu örnek, jQuery JavaScript kitaplığını kullanır.

İlk olarak, AjaxLoad sitesini kullanarak bir Ajax simgesi oluşturun .
Ardından, aşağıdakileri HTML'nize ekleyin:

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

Ve CSS dosyanıza aşağıdakiler:

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

Son olarak, jQuery'nin sağladığı Ajax olaylarına bağlanmanız gerekir; Ajax isteğinin ne zaman başlayacağı ve sona erdiği zaman için bir olay işleyicisi:

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

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

Bu çözüm aşağıdaki bağlantıdan. Ajax istek işleme sırasında animasyonlu bir simge nasıl görüntülenir


"Yalnızca bir kez yap" kancalama mekanizması için +1. Ancak sabit bir yükleme göstergesi, genellikle yükleme göstergesini kısmen gizleyen bir kaplamaya sahip olan modlar için o kadar da iyi değildir ... bu durumda yükleme göstergesini modalin içine, örneğin başlık çubuğuna koymak daha iyidir. Veya göstergeye, kaplamanın üzerinde gösterilmesi için yüksek bir z-endeksi ekleyebilir misiniz?
Pierre Henry

3
Hey, hepsi ... Bu cevaba göre bir demo izleyin.
Paul Vargas

Bu komut dosyalarını JQuery betiğine başvurudan SONRA koymayı unutmayın. Sayfa içindeki yerleştirme sırasının tersi olduğu için bir saatimi harcıyorum.
Greg Z.

@Ajaristi cevabına göre daha iyi bir çözüm olacak gibi görünüyor ajaxStart()ve ajaxStop()bu her AJAX grubu için yalnızca bir kez
ateşlenecek

30

JQuery kullanan genel bir yapılandırma var. Bu kod, her global ajax isteğinde çalışır.

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

İşte bir demo: http://jsfiddle.net/sd01fdcm/


1
Bu çok iyi çalışıyor ancak modal kullanan siteler için bir z-endeksi css eklemeyi unutmayın.
Deise Vicentin

1
Bu, doğru olarak kullandığı .ajaxStart()ve ajaxStop()AJAX grubu başına bir kez tetiklenen @leansy yanıtından daha fazla oy almalıdır : stackoverflow.com/questions/3735877/… .
SharpC

14

Yükleme göstergesi, AJAX isteğinde tamamlanan olay çağrılana kadar görüntülenen animasyonlu bir resimdir (.gif). http://ajaxload.info/ , kiplerinizin üzerine bindirebileceğiniz yükleme görüntüleri oluşturmak için birçok seçenek sunar. Bildiğim kadarıyla, Bootstrap yerleşik işlevselliği sağlamıyor.


6

Yenilenmesi gereken uzak içeriği yüklerken bu şekilde çalıştırdım:

$(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');
    });
});

Temel olarak, modal içeriği yüklenirken bir yükleme mesajıyla değiştirin. Yükleme tamamlandığında içerik değiştirilecektir.


3

Bir Glyphicon tarafından yükleme göstergesini böyle fark ettim:

<!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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.