445 Stimmen

Wie zeigt man in jQuery einen Lade-Spinner an?

En Prototyp Mit diesem Code kann ich ein "loading..."-Bild anzeigen:

var myAjax = new Ajax.Request( url, {method: 'get', parameters: pars, 
onLoading: showLoad, onComplete: showResponse} );

function showLoad () {
    ...
}

En jQuery Ich kann damit eine Serverseite in ein Element laden:

$('#message').load('index.php?pg=ajaxFlashcard');

aber wie füge ich ein Laden Spinner zu diesem Befehl, wie ich in Prototype tat?

21voto

Brent Punkte 22596
$('#message').load('index.php?pg=ajaxFlashcard', null, showResponse);
showLoad();

function showResponse() {
    hideLoad();
    ...
}

http://docs.jquery.com/Ajax/load#urldatacallback

0 Stimmen

Sie könnten Probleme mit der Zeitplanung haben, nicht wahr?

2 Stimmen

@UltimateBrent Ich glaube, Sie haben das falsch verstanden. Warum ist showLoad() kein Callback? JavaScript lädt den Inhalt asynchron. showLoad() funktioniert sogar bevor der Inhalt geladen wird, wenn ich richtig liege.

2 Stimmen

@Jaseem Ich verwende eine ähnliche Methode zu und es tatsächlich stützt sich auf async-Aufrufe. Ich würde showLoad irgendwo vor dem AJAX-Aufruf platzieren, aber der ganze Punkt ist, einen Spinner zu zeigen, lassen Sie JS den Aufruf starten, und töten Sie den Spinner in einem Callback, nachdem die AJAX abgeschlossen ist.

11voto

Nathan Bubna Punkte 6644

Verwenden Sie das Lade-Plugin: http://plugins.jquery.com/project/loading

$.loading.onAjax({img:'loading.gif'});

10 Stimmen

Ein Plugin für diese einfache Aufgabe? Das ist nicht wirklich eine gute Lösung, oder? Wer will schon 100 Skripte auf eine Seite laden?

2 Stimmen

Einverstanden. Komprimieren und verketten Sie, wenn Sie eine bessere Leistung wünschen.

9 Stimmen

Nicht einverstanden: Trennen und modularisieren Sie, verwenden Sie den Code wieder, wenn Sie in der Lage sein wollen, Ihre Arbeit zu pflegen und andere dies auch tun lassen wollen. Wie groß ist die Chance, dass Ihr Nutzer eine so schlechte Verbindung hat, dass sein Client ein Plugin nicht so gut laden kann wie Ihren Code?

9voto

Emil Stenström Punkte 11959

Am Ende habe ich zwei Änderungen an der Originalantwort .

  1. Ab jQuery 1.8 sollten ajaxStart und ajaxStop nur noch an document . Das macht es schwieriger, nur einen Teil der Ajax-Anfragen zu filtern. Soo...
  2. Umschalten auf ajaxSend y ajaxComplete macht es möglich, die aktuelle Ajax-Anfrage zu untersuchen, bevor der Spinner angezeigt wird.

Dies ist der Code nach diesen Änderungen:

$(document)
    .hide()  // hide it initially
    .ajaxSend(function(event, jqxhr, settings) {
        if (settings.url !== "ajax/request.php") return;
        $(".spinner").show();
    })
    .ajaxComplete(function(event, jqxhr, settings) {
        if (settings.url !== "ajax/request.php") return;
        $(".spinner").hide();
    })

9voto

Brendan Vogt Punkte 24614

Ich möchte auch zu dieser Antwort beitragen. Ich war auf der Suche nach etwas ähnlichem in jQuery und dies, was ich schließlich mit.

Ich habe meinen Ladespinner von http://ajaxload.info/ . Meine Lösung basiert auf dieser einfachen Antwort unter http://christierney.com/2011/03/23/global-ajax-loading-spinners/ .

Ihr HTML-Markup und CSS würden im Wesentlichen wie folgt aussehen:

<style>
     #ajaxSpinnerImage {
          display: none;
     }
</style>

<div id="ajaxSpinnerContainer">
     <img src="~/Content/ajax-loader.gif" id="ajaxSpinnerImage" title="working..." />
</div>

Und dann würde Ihr Code für jQuery etwa so aussehen:

<script>
     $(document).ready(function () {
          $(document)
          .ajaxStart(function () {
               $("#ajaxSpinnerImage").show();
          })
          .ajaxStop(function () {
               $("#ajaxSpinnerImage").hide();
          });

          var owmAPI = "http://api.openweathermap.org/data/2.5/weather?q=London,uk&APPID=YourAppID";
          $.getJSON(owmAPI)
          .done(function (data) {
               alert(data.coord.lon);
          })
          .fail(function () {
               alert('error');
          });
     });
</script>

So einfach ist das :)

9voto

Paul Punkte 577

Variante: Ich habe ein Icon mit id="logo" oben links auf der Hauptseite; ein Spinner-Gif wird dann darüber gelegt (mit Transparenz), wenn Ajax funktioniert.

jQuery.ajaxSetup({
  beforeSend: function() {
     $('#logo').css('background', 'url(images/ajax-loader.gif) no-repeat')
  },
  complete: function(){
     $('#logo').css('background', 'none')
  },
  success: function() {}
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X