Qualcuno può aiutarmi?
Non riesco a capire la differenza tra success
e .done()
di $.ajax
.
Se possibile, fornire esempi.
Qualcuno può aiutarmi?
Non riesco a capire la differenza tra success
e .done()
di $.ajax
.
Se possibile, fornire esempi.
In breve, disaccoppiare la funzione di callback di successo dalla funzione Ajax in modo da poter aggiungere i propri gestori senza modificare il codice originale (modello osservatore).
Si prega di trovare informazioni più dettagliate da qui: https://stackoverflow.com/a/14754681/1049184
E sotto di esso l'esempio mappa l'equivalenza di done => success, fail => error e sempre => complete – StuartLC
Questa risposta non raggiunge il punto. C'è una differenza tra 'successo:' usato come parametro e '.success()' come metodo su un 'jqXHR'. Quest'ultimo viene deprecato, ma il primo è ciò che l'OP chiedeva. – Alnitak
Success/error/complete sono deprecati e basati sulle modifiche allo stato di AJAX; done/fail/always sono basati su jQuery modifiche allo stato differite. Vedi http://api.jquery.com/category/deferred-object/. – mickeyreiss
success
si attiva solo se la chiamata AJAX ha esito positivo, ovvero restituisce in definitiva uno stato HTTP 200. error
si attiva se non riesce e complete
al termine della richiesta, indipendentemente dal successo.
In jQuery 1.8 sull'oggetto jqXHR
(restituito da $.ajax
) success
è stato sostituito con done
, error
con fail
e complete
con always
.
Tuttavia, si dovrebbe comunque essere in grado di inizializzare la richiesta AJAX con la vecchia sintassi. Quindi, queste 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"); });
Questo cambiamento è per la compatibilità con jQuery 1.5 di deferred object. Differite (e ora Promise
, che ha il pieno supporto del browser nativo in Chrome e FX) si consente di catena di 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 gestire rispetto una piramide nidificato di callback che si ottiene con success
.
Tuttavia, si ricorda che done
è ora abbandonata in favore della sintassi Promise
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); });
Questa è la pena adottare perché async
e await
estendono promesse migliorato di sintassi (e di gestione degli errori):
creazione della funzione prima di effettuare la richiesta e impostazione della funzione dopo aver effettuato la richiesta. Sembra che entrambi siano uguali ... mi farai vedere alcune differenze ??? – suhailvs
@suhail: non ce ne sono davvero; in jQuery 1.6 c'era 'successo', in jQuery 1.8 che è stato sostituito da' done'. Funzionano allo stesso modo, ma 'done' è più coerente con il resto di jQuery. – Keith
success
è il callback che viene richiamato quando la richiesta è riuscita e fa parte della chiamata $.ajax
. done
fa effettivamente parte dell'oggetto jqXHR
restituito da $.ajax()
e sostituisce success
in jQuery 1.8.
.success()
viene chiamato solo se il server Web risponde con un'intestazione HTTP 200 OK, in pratica quando tutto va bene.
I callback allegati a done() verranno attivati quando viene risolto il differimento. I callback allegati a fail() verranno attivati quando il differimento viene rifiutato.
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
Vale la pena notare che .success() NON viene chiamato quando JSON non valido viene rinviato con un codice di stato 200/OK. In particolare, ho riscontrato un problema con il codice back-end del server Web che generava i valori NaN e li serializzava come javascript NaN (cioè come simbolo, non stringa 'NaN') che in realtà non è valido JSON, quindi l'analisi della risposta come JSON fallisce e .fail() viene eseguito, ma lo stato della risposta è 200. Ma è ancora vero che SOLO il successo viene chiamato con un codice di stato OK; volevo solo sottolineare che solo perché è OK, non significa che sia "successo";) – Kasapo
dove hai letto di un metodo done() di $ .ajax()? AFAIK il metodo done è correlato all'oggetto $ .Deferred. Forse stai parlando di. Complete()? – fcalderan
su http://api.jquery.com/jQuery.ajax/page –
ok, è jQuery 1.8 :) Poiché $ .ajax restituisce una promessa da jQuery 1.5 questa è una semplice sostituzione per una questione di coerenza (utilizzando l'interfaccia di differita): done() ha luogo di successo(), fallisce() per error() e always() per complete() – fcalderan