443 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?

830voto

nickf Punkte 517253

Dazu gibt es mehrere Möglichkeiten. Mein bevorzugter Weg ist, eine Funktion an die ajaxStart/Stop-Ereignisse auf dem Element selbst anzuhängen.

$('#loadingDiv')
    .hide()  // Hide it initially
    .ajaxStart(function() {
        $(this).show();
    })
    .ajaxStop(function() {
        $(this).hide();
    })
;

Die Funktionen ajaxStart/Stop werden immer dann ausgelöst, wenn Sie einen Ajax-Aufruf tätigen.

更新情報 : Ab jQuery 1.8 heißt es in der Dokumentation, dass .ajaxStart/Stop sollte nur angebracht werden an document . Dies würde das obige Snippet in umwandeln:

var $loading = $('#loadingDiv').hide();
$(document)
  .ajaxStart(function () {
    $loading.show();
  })
  .ajaxStop(function () {
    $loading.hide();
  });

52 Stimmen

Das ist wahrscheinlich zu global für ein einfaches Laden in ein DIV.

379 Stimmen

Zu global? Wie viele verschiedene "Bitte warten"-Meldungen wollen Sie?

25 Stimmen

Auf diese Weise können Sie leider nicht steuern, Laden div Positionierung für den Fall, dass Sie nicht nur ein modales Ladefenster zeigen wollen, aber zeigen Sie es in der Nähe des Elements warten auf Ajax-Inhalt geladen werden in...

235voto

kr00lix Punkte 3214

Für jQuery verwende ich

jQuery.ajaxSetup({
  beforeSend: function() {
     $('#loader').show();
  },
  complete: function(){
     $('#loader').hide();
  },
  success: function() {}
});

13 Stimmen

Funktioniert bei mir, die html sollte in etwa so aussehen: <div id='loader'><img src="spinner.gif"/></div>

7 Stimmen

Diese war für mich am saubersten. Anstelle von ajaxSetup, platzierte ich beforeSend: und complete: innerhalb der $ajax({... Anweisung.

5 Stimmen

Ich weiß nicht, was es wert ist, aber jQuery erwähnt in seiner Dokumentation, dass die Verwendung von .ajaxSetup() wird nicht empfohlen. Link

58voto

Seeker Punkte 1837

Sie können einfach die jQuery's .ajax Funktion und verwenden Sie deren Option beforeSend und definieren Sie eine Funktion, mit der Sie so etwas wie ein Lade-Div einblenden können und bei Erfolg dieses Lade-Div ausblenden können.

jQuery.ajax({
    type: "POST",
    url: 'YOU_URL_TO_WHICH_DATA_SEND',
    data:'YOUR_DATA_TO_SEND',
    beforeSend: function() {
        $("#loaderDiv").show();
    },
    success: function(data) {
        $("#loaderDiv").hide();
    }
});

Sie können jedes beliebige Spinning-Gif-Bild haben. Hier ist eine Website, die ein großer AJAX Loader Generator nach Ihrem Farbschema ist: http://ajaxload.info/

20 Stimmen

Die success wird nicht aufgerufen, wenn ein Fehler auftritt, aber "Sie erhalten immer eine complete Callback, sogar für synchrone Anfragen", so jQuery Ajax-Ereignisse .

28voto

Amin Saqi Punkte 17757

Wenn Sie Folgendes verwenden $.ajax() können Sie etwas wie dieses verwenden:

$.ajax({
  url: "destination url",
  success: sdialog,
  error: edialog,
  // shows the loader element before sending.
  beforeSend: function() {
    $("#imgSpinner1").show();
  },
  // hides the loader after completion of request, whether successfull or failor.             
  complete: function() {
    $("#imgSpinner1").hide();
  },
  type: 'POST',
  dataType: 'json'
});

Obwohl die Einstellung "beforeSend" genannt wird, ist ab jQuery 1.5 "beforeSend" wird unabhängig von der Art der Anfrage aufgerufen. d.h. Die .show() Funktion wird aufgerufen, wenn type: 'GET' .

25voto

Josh Stodola Punkte 79569

Sie können das animierte Bild direkt vor dem AJAX-Aufruf in das DOM einfügen und es mit einer Inline-Funktion entfernen...

$("#myDiv").html('<img src="images/spinner.gif" alt="Wait" />');
$('#message').load('index.php?pg=ajaxFlashcard', null, function() {
  $("#myDiv").html('');
});

Dadurch wird sichergestellt, dass Ihre Animation bei nachfolgenden Anfragen mit demselben Frame beginnt (falls das wichtig ist). Beachten Sie, dass alte Versionen des IE pourrait Schwierigkeiten mit der Animation haben.

Viel Glück!

13 Stimmen

Top-Tipp: Laden Sie die spinner.gif in ein div mit der Anzeige auf none. Andernfalls kann es zu einem verzögerten Spinner-Effekt kommen, da der Spinner noch heruntergeladen wird.

0 Stimmen

Netter Tipp, viel einfacher als ein fremdes Plugin zu verwenden

0 Stimmen

Nice! aber liebe, eine Sache mehr, dass ich Spinner für 2 Sekunden angezeigt werden soll, auch die Seite bereits geladen hat.

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