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?

8voto

Lee Goddard Punkte 9438

Sie können nicht nur globale Standardwerte für Ajax-Ereignisse festlegen, sondern auch das Verhalten für bestimmte Elemente. Vielleicht reicht es aus, die Klasse zu ändern?

$('#myForm').ajaxSend( function() {
    $(this).addClass('loading');
});
$('#myForm').ajaxComplete( function(){
    $(this).removeClass('loading');
});

Beispiel CSS, um #myForm mit einem Spinner zu verstecken:

.loading {
    display: block;
    background: url(spinner.gif) no-repeat center middle;
    width: 124px;
    height: 124px;
    margin: 0 auto;
}
/* Hide all the children of the 'loading' element */
.loading * {
    display: none;  
}

8voto

Umesh kumar Punkte 81

Sie können einfach ein Ladebild demselben Tag zuweisen, auf dem Sie später den Inhalt mit einem Ajax-Aufruf laden werden:

$("#message").html('<span>Loading...</span>');

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

Sie können das span-Tag auch durch ein Bild-Tag ersetzen.

1 Stimmen

Es wird schwer sein, die UI auf diese Weise zu verwalten. Möglicherweise benötigen wir völlig unterschiedliche Stile für den "Lade"-Text und die Abschlussmeldung. Wir können die oben erwähnte Callback-Methode verwenden, um dieses Problem zu lösen

4voto

Shane Rowatt Punkte 1741

Beachten Sie, dass Sie asynchrone Aufrufe für Spinner verwenden müssen, um zu funktionieren (zumindest ist das, was meine nicht zeigen, bis nach dem Ajax-Aufruf verursacht und ging dann schnell weg, wie der Aufruf beendet hatte und entfernt den Spinner).

$.ajax({
        url: requestUrl,
        data: data,
        dataType: 'JSON',
        processData: false,
        type: requestMethod,
        async: true,                         <<<<<<------ set async to true
        accepts: 'application/json',
        contentType: 'application/json',
        success: function (restResponse) {
            // something here
        },
        error: function (restResponse) {
            // something here                
        }
    });

4voto

Izabela Skibinska Punkte 443
$('#loading-image').html('<img src="/images/ajax-loader.gif"> Sending...');

        $.ajax({
            url:  uri,
            cache: false,
            success: function(){
                $('#loading-image').html('');           
            },

           error:   function(jqXHR, textStatus, errorThrown) {
            var text =  "Error has occured when submitting the job: "+jqXHR.status+ " Contact IT dept";
           $('#loading-image').html('<span style="color:red">'+text +'  </span>');

            }
        });

0 Stimmen

Der kürzeste Weg wäre, ein Bild-Tag mit einem Bild einzufügen, das von ajaxload.info mit transparentem Hintergrund

3voto

andcl Punkte 2905

Dies ist ein sehr einfaches und intelligentes Plugin für diesen speziellen Zweck: https://github.com/hekigan/is-loading

0 Stimmen

Wirklich schön! Vor allem, wenn Sie einen Blick auf die Demos nehmen ... Deaktivieren Sie DOM-Elemente, In Tag, Full Overlay, Element Overlay ... es bietet alles, was Sie brauchen. Und Sie können Full Overlay leicht kombinieren mit diese Antwort um es sofort zum Laufen zu bringen.

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