Как отобразить вращающийся индикатор «занято» в определенном месте веб-страницы?
Я хочу запустить / остановить индикатор при запуске / завершении запроса Ajax.
Это действительно просто вопрос отображения / скрытия анимированного gif или есть более элегантное решение?
javascript
jquery
Тони Пони
источник
источник
ajaxSetup()
. Хотел бы, чтобыglobal
были даны дополнительные объяснения по поводу собственности.В документации jQuery рекомендуется сделать что-то вроде следующего:
$( document ).ajaxStart(function() { $( "#loading" ).show(); }).ajaxStop(function() { $( "#loading" ).hide(); });
Где
#loading
находится элемент с вашим индикатором занятости?Рекомендации:
http://api.jquery.com/ajaxStop/
Кроме того,
jQuery.ajaxSetup
API явно рекомендует избегатьjQuery.ajaxSetup
:источник
Я обычно просто показываю / скрываю IMG, как заявляли другие. Я нашел хороший сайт, который генерирует "загрузочные гифки"
Ссылка Я просто помещаю его внутрь
div
и скрываю по умолчаниюdisplay: none;
(css), затем, когда вы вызываете функцию, показываю изображение, как только оно полностью скрывает его снова.источник
да, это действительно просто вопрос показа / скрытия анимированного gif.
источник
Я сделал это в своем проекте,
создайте div с задним URL-адресом как gif, который представляет собой не что иное, как анимацию gif
<div class="busyindicatorClass"> </div> .busyindicatorClass { background-url///give animation here }
в вашем вызове ajax добавьте этот класс в div и в успешном ajax удалите класс.
он сделает свое дело.
дайте мне знать, если вам понадобится что-то еще, я могу дать вам более подробную информацию
в успехе ajax удалите класс
success: function(data) { remove class using jquery }
источник
Чтобы немного расширить решение Родриго - для запросов, которые выполняются часто, вы можете отображать загрузочное изображение только в том случае, если запрос занимает больше минимального интервала времени, иначе изображение будет постоянно появляться и быстро исчезать.
var loading = false; $.ajaxSetup({ beforeSend: function () { // Display loading icon if AJAX call takes >1 second loading = true; setTimeout(function () { if (loading) { // show loading image } }, 1000); }, complete: function () { loading = false; // hide loading image } });
источник
Я сделал это в своем проекте:
Глобальные события в application.js:
$(document).bind("ajaxSend", function(){ $("#loading").show(); }).bind("ajaxComplete", function(){ $("#loading").hide(); });
«загрузка» - это элемент, который нужно показать и скрыть!
Ссылки: http://api.jquery.com/Ajax_Events/
источник
Мне пришлось использовать
HTML: <img id="loading" src="~/Images/spinner.gif" alt="Updating ..." style="display: none;" /> In script file: // invoked when sending ajax request $(document).ajaxSend(function () { $("#loading").show(); }); // invoked when sending ajax completed $(document).ajaxComplete(function () { $("#loading").hide(); });
источник
Старый поток, но я хотел обновить, так как сегодня я работал над этой проблемой, у меня не было jquery в моем проекте, поэтому я сделал это обычным старым способом javascript, мне также нужно было заблокировать контент на экране, поэтому в моем xhtml
<img id="loading" src="#{request.contextPath}/images/spinner.gif" style="display: none;"/>
в моем javascript
document.getElementsByClassName('myclass').style.opacity = '0.7' document.getElementById('loading').style.display = "block";
источник
XMLHttpRequest
?