Tampilkan gambar pemuatan saat $ .ajax dilakukan

116

Saya hanya ingin tahu bagaimana cara menampilkan gambar yang menunjukkan bahwa permintaan async sedang berjalan. Saya menggunakan kode berikut untuk melakukan permintaan asinkron:

$.ajax({
  url: uri,
  cache: false,
  success: function(html){
    $('.info').append(html);
  }
});

Ada ide?

Suara positif
sumber

Jawaban:

255

Anda dapat, tentu saja, menampilkannya sebelum membuat permintaan, dan menyembunyikannya setelah selesai:

$('#loading-image').show();
$.ajax({
      url: uri,
      cache: false,
      success: function(html){
        $('.info').append(html);
      },
      complete: function(){
        $('#loading-image').hide();
      }
    });

Saya biasanya lebih suka solusi yang lebih umum untuk mengikatnya ke acara ajaxStart dan ajaxStop global, dengan cara itu ia muncul untuk semua acara ajax:

$('#loading-image').bind('ajaxStart', function(){
    $(this).show();
}).bind('ajaxStop', function(){
    $(this).hide();
});
Zack Bloom
sumber
30
Memulai jQuery 1.9, peristiwa AJAX harus dilampirkan documentsaja. Lihat stackoverflow.com/questions/2275342/…
Simone
62

Gunakan fungsi beforeSend dan complete objek ajax. Lebih baik menampilkan gif dari dalam beforeSend sehingga semua perilaku dikemas dalam satu objek. Berhati-hatilah saat menyembunyikan gif menggunakan fungsi sukses. Jika permintaan gagal, Anda mungkin masih ingin menyembunyikan gif. Untuk melakukan ini gunakan fungsi Lengkap. Ini akan terlihat seperti ini:

$.ajax({
    url: uri,
    cache: false,
    beforeSend: function(){
        $('#image').show();
    },
    complete: function(){
        $('#image').hide();
    },
    success: function(html){
       $('.info').append(html);
    }
});
jEremyB
sumber
Terima kasih untuk cuplikan sederhana ini. Hemat waktu @jEremyB
Anahit DEV
Ini jauh lebih berguna dan solusi universal yang disetujui. Terima kasih.
Eryk Wróbel
20

Kode HTML:

<div class="ajax-loader">
  <img src="{{ url('guest/images/ajax-loader.gif') }}" class="img-responsive" />
</div>

Kode CSS:

.ajax-loader {
  visibility: hidden;
  background-color: rgba(255,255,255,0.7);
  position: absolute;
  z-index: +100 !important;
  width: 100%;
  height:100%;
}

.ajax-loader img {
  position: relative;
  top:50%;
  left:50%;
}

Kode JQUERY:

$.ajax({
  type:'POST',
  beforeSend: function(){
    $('.ajax-loader').css("visibility", "visible");
  },
  url:'/quantityPlus',
  data: {
   'productId':p1,
   'quantity':p2,
   'productPrice':p3},
   success:function(data){
     $('#'+p1+'value').text(data.newProductQuantity);
     $('#'+p1+'amount').text("₹ "+data.productAmount);
     $('#totalUnits').text(data.newNoOfUnits);
     $('#totalAmount').text("₹ "+data.newTotalAmount);
  },
  complete: function(){
    $('.ajax-loader').css("visibility", "hidden");
  }
});

}
sumityadavbadli.dll
sumber
8

"Gambar" yang biasanya ditampilkan orang selama panggilan ajax adalah gif animasi. Karena tidak ada cara untuk menentukan persen penyelesaian permintaan ajax, gif animasi yang digunakan adalah pemintal tak tentu. Ini hanyalah gambar yang berulang-ulang seperti bola lingkaran dengan berbagai ukuran. Situs yang bagus untuk membuat pemintal tak tentu khusus Anda sendiri adalah http://ajaxload.info/

jEremyB
sumber
5

Saya pikir ini mungkin lebih baik jika Anda memiliki banyak panggilan $ .ajax

$(document).ajaxSend(function(){
    $(AnyElementYouWantToShowOnAjaxSend).fadeIn(250);
});
$(document).ajaxComplete(function(){
    $(AnyElementYouWantToShowOnAjaxSend).fadeOut(250);
});

CATATAN:

Jika Anda menggunakan CSS. Elemen yang ingin Anda tunjukkan saat ajax mengambil data dari kode back-end Anda harus seperti ini.

AnyElementYouWantToShowOnAjaxSend {
    position: fixed;
    top: 0;
    left: 0;
    height: 100vh; /* to make it responsive */
    width: 100vw; /* to make it responsive */
    overflow: hidden; /*to remove scrollbars */
    z-index: 99999; /*to make it appear on topmost part of the page */
    display: none; /*to make it visible only on fadeIn() function */
}
Anak yang Mengerikan
sumber
1
ini harus menjadi jawaban yang diterima karena generik!
Rotimi
3

Saya selalu menyukai BlockUIplugin ini: http://jquery.malsup.com/block/

Ini memungkinkan Anda untuk memblokir elemen tertentu dari halaman, atau seluruh halaman saat permintaan ajax sedang berjalan.

Matt
sumber
1

Sebelum panggilan Anda, masukkan gambar pemuatan dalam div / span di suatu tempat dan kemudian pada fungsi sukses hapus gambar itu. Atau, Anda dapat menyiapkan kelas css seperti memuat yang mungkin terlihat seperti ini

.loading
{
    width: 16px;
    height: 16px;
    background:transparent url('loading.gif') no-repeat 0 0;
    font-size: 0px;
    display: inline-block;
}

Dan kemudian tetapkan kelas ini ke span / div dan hapus dalam fungsi sukses

Vadim
sumber
0

sesuatu seperti ini:

$('#image').show();
$.ajax({
    url: uri,
    cache: false,
    success: function(html){
       $('.info').append(html);
       $('#image').hide();
    }
});
Andy
sumber
0

Anda dapat menambahkan acara ajax start dan complete, ini berfungsi ketika Anda mengklik tombol event

 $(document).bind("ajaxSend", function () {
            $(":button").html('<i class="fa fa-spinner fa-spin"></i> Loading');
            $(":button").attr('disabled', 'disabled');
        }).bind("ajaxComplete", function () {
            $(":button").html('<i class="fa fa-check"></i> Show');
            $(":button").removeAttr('disabled', 'disabled');
        });
Roshan Vishwakarma
sumber
0
  1. Buat elemen beban misalnya elemen dengan id = example_load.
  2. Sembunyikan secara default dengan menambahkan style = "display: none;".
  3. Sekarang tunjukkan menggunakan fungsi elemen jquery show tepat di atas ajax Anda.

    $('#example_load').show(); $.ajax({ type: "POST", data: {}, url: '/url', success: function(){ // Now hide the load element $('#example_load').hide(); } });

Deepak Sharma
sumber
-1

**strong text**Set the Time out to the ajax calls
function testing(){
    
    $("#load").css("display", "block");
    setTimeout(function(){
    $.ajax({
             type: "GET",

          
             url:testing.com,
            
             async: false,
             
             success : function(response){
           
             alert("connection established");

              
            },
            complete: function(){
            alert("sended");
            $("#load").css("display", "none");
         
           },
            error: function(jqXHR, exception) {
                       alert("Write error Message Here");
                  },


       });
     },5000);


  }
  .loader {
    border: 16px solid #f3f3f3;
    border-radius: 50%;
    border-top: 16px solid #3498db;
    width: 120px;
    height: 120px;
    -webkit-animation: spin 2s linear infinite; /* Safari */
    animation: spin 2s linear infinite;
  }
  
  /* Safari */
  @-webkit-keyframes spin {
    0% { -webkit-transform: rotate(0deg); }
    100% { -webkit-transform: rotate(360deg); }
  }
  
  @keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
  }
<div id="load" style="display: none" class="loader"></div>
<input type="button"  onclick="testing()"  value="SUBMIT" >

Narendra Reddy
sumber