Qualcuno può aiutarmi?
Non sono in grado di capire la differenza tra success
e .done()
di $.ajax
.
Se possibile, fornire esempi.
Qualcuno può aiutarmi?
Non sono in grado di capire la differenza tra success
e .done()
di $.ajax
.
Se possibile, fornire esempi.
Risposte:
In breve, separare la funzione di callback di successo dalla funzione ajax in modo da poter aggiungere in seguito i propri gestori senza modificare il codice originale (modello di osservatore).
Si prega di trovare informazioni più dettagliate da qui: https://stackoverflow.com/a/14754681/1049184
success:
usato come parametro e .success()
come metodo su un file jqXHR
. Quest'ultimo è stato deprecato, ma il primo è ciò che chiedeva il PO.
success
si attiva solo se la chiamata AJAX ha esito positivo, ovvero alla fine restituisce uno stato HTTP 200. error
si attiva se fallisce e complete
quando la richiesta termina, indipendentemente dal successo.
In jQuery 1.8 l' jqXHR
oggetto (restituito da $.ajax
) è success
stato sostituito con done
, error
con fail
e complete
con always
.
Tuttavia dovresti ancora essere in grado di inizializzare la richiesta AJAX con la vecchia sintassi. Quindi questi fanno cose simili:
// set success action before making the request
$.ajax({
url: '...',
success: function(){
alert('AJAX successful');
}
});
// set success action just after starting the request
var jqxhr = $.ajax( "..." )
.done(function() { alert("success"); });
Questa modifica è per compatibilità con l' oggetto differito di jQuery 1.5 . Differito (e ora Promise
, che ha il supporto completo del browser nativo in Chrome e FX) ti consente di concatenare azioni asincrone:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
Questa catena di funzioni è più facile da mantenere rispetto a una piramide annidata di callback con cui si ottiene success
.
Tuttavia, tieni presente che done
ora è deprecato a favore della Promise
sintassi che utilizza then
invece:
$.ajax("parent").
then(function(p) { return $.ajax("child/" + p.id); }).
then(someOtherDeferredFunction).
then(function(c) { alert("success: " + c.name); }).
catch(function(err) { alert("error: " + err.message); });
Vale la pena adottarlo perché async
ed await
extended promette una sintassi migliorata (e la gestione degli errori):
try {
var p = await $.ajax("parent");
var x = await $.ajax("child/" + p.id);
var c = await someOtherDeferredFunction(x);
alert("success: " + c.name);
}
catch(err) {
alert("error: " + err.message);
}
success
, in jQuery 1.8 che è stato sostituito da done
. Funzionano allo stesso modo, ma done
sono più coerenti con il resto di jQuery.
.done
stato il primo (e ora vicolo cieco) di jQuery a quello che è diventato Promise
e che ora ha un supporto linguistico abbastanza completo. In nuovi progetti userei const response = await fetch(...)
invece.
.success()
viene chiamato solo se il tuo server web risponde con un'intestazione HTTP 200 OK, in pratica quando tutto va bene.
I callback allegati a done () verranno attivati quando il differito viene risolto. I callback allegati a fail () verranno attivati quando il differito viene rifiutato.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
success
è il callback che viene richiamato quando la richiesta ha esito positivo e fa parte della $.ajax
chiamata. done
è effettivamente parte jqXHR
dell'oggetto restituito da $.ajax()
e sostituisce success
in jQuery 1.8.