2014-04-14 9 views
13

Die JQuery documentation for getJSON zeigt ein Beispiel:Warum hat JQuery.getJSON() eine Erfolgs- und eine Done-Funktion?

var jqxhr = $.getJSON("example.json", function() { 
    console.log("success"); 
}) 
    .done(function() { 
    console.log("second success"); 
    }) 
    .fail(function() { 
    console.log("error"); 
    }) 
    .always(function() { 
    console.log("complete"); 
    }); 

Was ist der Unterschied zwischen der Erfolgsfunktion ist (wie der zweite Parameter übergeben) die die getan() -Funktion? Sie scheinen das Gleiche zu sein.

+0

http://api.jquery.com/jQuery.ajax/ –

+0

Diese Frage scheint off-topic zu sein, weil es darum geht, warum jQuery ist als spezifischer Weg konzipiert. –

+6

Ich glaube nicht, dass es ein Thema ist. Das OP möchte wissen, ob es Unterschiede zwischen beiden Möglichkeiten gibt. –

Antwort

12

Zunächst gaben jQuery asynchrone Funktionen keine Versprechen zurück, Sie mussten den Rückruf verwenden.

Dann fügten sie das verzögerte (Versprechen) System hinzu, behielten aber die Rückrufe für die Kompatibilität (und weil nicht jeder wie aufgeschoben).

Von the Deferred object documentation:

In JavaScript ist es üblich, Funktionen aufzurufen, die Rückrufe optional akzeptieren, die in dieser Funktion aufgerufen werden. Zum Beispiel in Versionen vor jQuery 1.5, asynchrone Prozesse wie jQuery.ajax() Rückrufe akzeptieren, um einige Zeit in den in naher Zukunft auf Erfolg, Fehler, und die Fertigstellung des Ajax-Request aufgerufen werden.

jQuery.Deferred() führt verschiedene Verbesserungen ein, wie Callbacks verwaltet und aufgerufen werden. Insbesondere stellt jQuery.Deferred() flexible Möglichkeiten zur Verfügung, um mehrere Rückrufe bereitzustellen, und diese Rückrufe können aufgerufen werden, unabhängig davon, ob der ursprüngliche Rückrufversand bereits aufgetreten ist. jQuery Deferred basiert auf dem CommonJS Promises/A Design.

4

Sie sind die gleiche Sache. Die Done-Funktion soll funktionieren wie Promise Auf diese Weise können Sie Handler aus dem Ergebnis des Ajax-Aufrufs installieren. Es funktioniert sogar, wenn Sie nach Abschluss des asynchronen Aufrufs fertig sind (durch Speichern des Rückgabewerts)