Jak wyświetlić obracający się wskaźnik „zajętości” w określonym miejscu na stronie internetowej?
Chcę uruchomić / zatrzymać wskaźnik, gdy żądanie Ajax rozpoczyna / kończy się.
Czy to naprawdę kwestia pokazania / ukrycia animowanego gifa, czy jest bardziej eleganckie rozwiązanie?
javascript
jquery
Tony the Pony
źródło
źródło
ajaxSetup()
. Wolałby, abyglobal
podano dalsze wyjaśnienia dotyczące nieruchomości.Dokumentacja jQuery zaleca wykonanie następujących czynności:
$( document ).ajaxStart(function() { $( "#loading" ).show(); }).ajaxStop(function() { $( "#loading" ).hide(); });
Gdzie
#loading
jest element ze wskaźnikiem zajętości.Bibliografia:
http://api.jquery.com/ajaxStop/
Ponadto
jQuery.ajaxSetup
API wyraźnie zaleca unikaniejQuery.ajaxSetup
następujących sytuacji:źródło
Mam tendencję do po prostu pokazywania / ukrywania IMG, jak powiedzieli inni. Znalazłem dobrą stronę, która generuje „ładowanie gifów”
Link Po prostu umieściłem go wewnątrz a
div
i ukryj domyślniedisplay: none;
(css), a następnie gdy wywołasz funkcję pokaż obraz, po jego całkowitym ukryj go ponownie.źródło
tak, tak naprawdę chodzi tylko o pokazanie / ukrycie animowanego gifu.
źródło
Zrobiłem to w moim projekcie,
utwórz element div z adresem URL w tle jako gif, który jest niczym innym jak animowanym gifem
<div class="busyindicatorClass"> </div> .busyindicatorClass { background-url///give animation here }
w wywołaniu AJAX dodaj tę klasę do elementu DIV, aw przypadku pomyślnego AJAX usuń klasę.
załatwi sprawę.
daj mi znać, jeśli potrzebujesz czegoś innego, mogę podać więcej szczegółów
w sukcesie AJAX usuń klasę
success: function(data) { remove class using jquery }
źródło
Aby nieco rozszerzyć rozwiązanie Rodrigo - w przypadku żądań, które są wykonywane często, możesz chcieć wyświetlić obraz wczytywania tylko wtedy, gdy żądanie trwa dłużej niż minimalny przedział czasu, w przeciwnym razie obraz będzie stale pojawiał się i szybko znikał
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 } });
źródło
Zrobiłem to w swoim projekcie:
Zdarzenia globalne w application.js:
$(document).bind("ajaxSend", function(){ $("#loading").show(); }).bind("ajaxComplete", function(){ $("#loading").hide(); });
„ładowanie” to element do pokazania i ukrycia!
Źródła: http://api.jquery.com/Ajax_Events/
źródło
Musiałem użyć
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(); });
źródło
Stary wątek, ale chciałem zaktualizować, ponieważ dzisiaj pracowałem nad tym problemem, nie miałem jquery w moim projekcie, więc zrobiłem to w zwykły stary sposób javascript, musiałem również zablokować zawartość na ekranie, więc w moim xhtml
<img id="loading" src="#{request.contextPath}/images/spinner.gif" style="display: none;"/>
w moim javascript
document.getElementsByClassName('myclass').style.opacity = '0.7' document.getElementById('loading').style.display = "block";
źródło
XMLHttpRequest
?