webentwicklung-frage-antwort-db.com.de

Aufruf an jquery ajax - .fail vs.: error

Welches sollte ich verwenden? 

Gibt es einen Grund, einen zu verwenden, anstatt den anderen?

Ist einer für die Fehlerbehandlung besser?

$.ajax({
    url: url,
    data: { start: start, end: end }
}).done(function(data, textStatus, jqXHR) {
    $('#myElement').append(data);
}).fail(function() {
    // report error    
});

OR

$.ajax({
    url: url,
    data: { start: start, end: end },
    success: function(data, textStatus, jqXHR) {
        $('#myElement').append(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        // report error
    }
});
67
PeteGO

Die beiden Optionen sind gleichwertig.

Die Promise-Style-Schnittstelle (.fail() und .done()) ermöglicht es Ihnen jedoch, den Code, der die Anforderung erstellt, vom Code zu trennen, der die Antwort verarbeitet.

Sie können eine Funktion schreiben, die eine AJAX - Anforderung sendet und das jqXHR-Objekt zurückgibt, diese Funktion dann an anderer Stelle aufrufen und einen Handler hinzufügen.

In Verbindung mit der Funktion .pipe() kann die Benutzeroberfläche im Versprechenstil auch dazu beitragen, die Verschachtelung bei mehreren AJAX -Aufrufen zu reduzieren:

$.ajax(...)
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    })
    .pipe(function() { 
        return $.ajax(...);
    });
37
SLaks

Nur um dies zu erfrischen ...

Der Erfolgs- und Fehleransatz wurde mit jQuery 1.8 nicht mehr unterstützt.

jQuery Ajax

Hinweis zur Ablehnung: Die Rückrufe jqXHR.success (), jqXHR.error () und jqXHR.complete () werden seit jQuery 1.8 nicht mehr unterstützt. Verwenden Sie stattdessen jqXHR.done (), jqXHR.fail () und jqXHR.always (), um Ihren Code für die eventuelle Entfernung vorzubereiten.

27
slohr

Die Verwendung des verkettbaren verzögerten Objekt Versprechungsstils ermöglicht eine sauberere Struktur und die Verwendung von always .

let data = {"key":"value"}

$.ajax({
    type: 'PUT',
    url: 'http://example.com/api',
    contentType: 'application/json',
    data: JSON.stringify(data), 
}).done(function () {
    console.log('SUCCESS');
}).fail(function (msg) {
    console.log('FAIL');
}).always(function (msg) {
    console.log('ALWAYS');
});
0
ow3n