2014-04-14 12 views
13

Il JQuery documentation for getJSON mostra un esempio di:Perché JQuery.getJSON() ha una funzione riuscita e completata?

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"); 
    }); 

Qual è la differenza tra la funzione di successo (passato come secondo parametro) la funzione di fatto()? Sembrano essere la stessa cosa

+0

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

+0

Questa domanda sembra essere fuori tema perché riguarda il perché jQuery è progettato in modo specifico. –

+6

Non penso che sia fuori tema. L'OP vorrebbe sapere se ci sono differenze tra entrambi i modi. –

risposta

12

Inizialmente, le funzioni asincrone di jQuery non restituivano promesse, si doveva usare il callback.

Quindi hanno aggiunto il sistema differito (promessa) ma hanno mantenuto i callback per compatibilità (e perché non tutti gradiscono la differita).

Da the Deferred object documentation:

In JavaScript è comune per richiamare le funzioni che accettano opzionalmente callback che sono chiamati all'interno di tale funzione. Ad esempio, in versioni precedenti alla 1.5 jQuery, processi asincroni, come jQuery.ajax() accettare callback da invocare qualche tempo nella prossimo futuro in caso di successo, l'errore, e il completamento della richiesta Ajax.

jQuery.Deferred() introduce numerosi miglioramenti al modo in cui i callback vengono gestiti e richiamati. In particolare, jQuery.Deferred() fornisce modi flessibili per fornire più callback e queste callback possono essere invocate indipendentemente dal fatto che la spedizione di callback originale abbia già avuto . jQuery Deferred è basato sul progetto CommonJS Promises/A .

4

Sono la stessa cosa. La funzione done ha lo scopo di funzionare come Promise In questo modo è possibile installare i gestori dal risultato della chiamata ajax. Funziona anche se si chiama terminata la chiamata asincrona (memorizzando il valore restituito)

Problemi correlati