Показать загрузку изображения в то время как $.выполняется ajax


Мне просто интересно, как показать изображение, которое указывает, что асинхронный запрос выполняется. Я использую следующий код для выполнения асинхронного запроса:

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

какие идеи?

8 85

8 ответов:

вы можете, конечно, показать его перед тем, как сделать запрос, и скрыть его после его завершения:

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

Я обычно предпочитаю более общее решение привязки его к глобальным событиям ajaxStart и ajaxStop, таким образом, он отображается для всех событий ajax:

$('#loading-image').bind('ajaxStart', function(){
    $(this).show();
}).bind('ajaxStop', function(){
    $(this).hide();
});

используйте функции объекта ajax beforeSend и complete. Лучше показать gif изнутри перед отправкой, чтобы все поведение было инкапсулировано в один объект. Будьте осторожны, скрывая gif с помощью функции успеха. Если запрос не выполняется, вы, вероятно, все еще хотите скрыть gif. Для этого используйте функции. Это будет выглядеть так:

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

HTML-код :

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

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%;
}

код 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");
  }
});

}

люди "изображения" обычно показывают во время вызова ajax-это анимированный gif. Поскольку нет способа определить процент завершения запроса ajax, используемые анимированные GIF-файлы являются неопределенными прядильщиками. Это просто изображение, повторяющееся снова и снова, как шар из кругов разных размеров. Хороший сайт, чтобы создать свой собственный неопределенный счетчик являетсяhttp://ajaxload.info/

Мне всегда нравились BlockUI плагин: http://jquery.malsup.com/block/

Он позволяет блокировать определенные элементы страницы или всю страницу во время выполнения запроса ajax.

Я думаю, это может быть лучше, если у вас есть тонны $.ajax вызывает

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

Примечание:

Если вы используете CSS. Элемент, который вы хотите показать, пока ajax извлекает данные из вашего внутреннего кода, должен быть таким.

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

перед вызовом либо вставить изображение загрузки в div / span где-то, а затем на функции успеха удалить это изображение. В качестве альтернативы вы можете настроить класс css как загрузка, которая может выглядеть так

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

а затем присвоить этот класс span / div и очистить его в функции успеха

что-то вроде этого:

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