Показать загрузку изображения в то время как $.выполняется ajax
Мне просто интересно, как показать изображение, которое указывает, что асинхронный запрос выполняется. Я использую следующий код для выполнения асинхронного запроса:
$.ajax({
url: uri,
cache: false,
success: function(html){
$('.info').append(html);
}
});
какие идеи?
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 и очистить его в функции успеха