Dovrei usare .done () e .fail () per il nuovo codice AJAX jQuery invece di successo ed errore


167

Ho codificato in questo modo:

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID },
    success: function (data) {
        $('#CityID').html(data);
    },
    error: function (ajaxContext) {
        alert(ajaxContext.responseText)
    }
});

Ma quando guardo la .ajax()documentazione di jQuery alla fine sembra suggerire che dovrei scrivere un codice come questo sotto o almeno suggerisce di aggiungere a .done()e a .fail():

var request = $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
});

request.done(function (data) {
    xxx;
});
request.fail(function (jqXHR, textStatus) {
    xxx;
});

Aggiornare

Se codifico in questo modo è lo stesso o c'è qualche vantaggio nel dividerlo in tre?

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
}).done(function (data) {
    xxx;
}).fail(function (jqXHR, textStatus) {
    xxx;
});

Risposte:


165

Come affermato da user2246674, l'utilizzo successe errorcome parametro della funzione ajax è valido.

Per coerenza con la risposta precedente, leggendo il documento:

Avviso di deprecazione :

I callback jqXHR.success (), jqXHR.error () e jqXHR.complete () saranno deprecati in jQuery 1.8. Per preparare il codice per la loro eventuale rimozione, utilizzare invece jqXHR.done (), jqXHR.fail () e jqXHR.always ().

Se si utilizza la funzione di manipolazione del callback (ad esempio utilizzando il concatenamento del metodo), utilizzare .done(), .fail()e .always()invece di success(), error()e complete().


54
Non sono d'accordo. I riferimenti parlano delle funzioni di manipolazione del callback (ad es .error. .success) Che sono deprecate a favore del modello differito più universale, ma i parametri del ajaxmetodo non sono deprecati e sono entrambi validi e accettabili - anche in jQuery 1.9 / 2.0! In tutte le forme correnti, ajaxrestituisce comunque un differito; possibilmente con callback differiti già collegati.
user2246674,

1
Eccolo, jQuery 1.9 e successo :, errore: e completo: sono ancora utilizzabili. Tuttavia, la mia domanda è: .done () == per il successo:?
TARKUS,

3
@GregoryLewis Da JQuery 1.10 codice sorgente: jqXHR.success = jqXHR.done;.
Michael Laffargue,

9
Mi piacerebbe onestamente preferisco success, fail, always.
ahnbizcad,

4
WOW, ho letto male anche la documentazione. Ho letteralmente pensato che le opzioni "successo" / "errore" per $ .ajax siano state riscritte in "fatto / fallito". Erano solo le catene del metodo di callback. Onestamente, penso che avrebbero dovuto cambiare anche i nomi delle opzioni. Questo mi ha fatto inciampare per ore.
OzzyTheGiant,

12

Voglio aggiungere qualcosa sul post di @Michael Laffargue:

jqXHR.done() è più veloce!

jqXHR.success()avere un po 'di tempo di caricamento nel callback e talvolta può sovraccaricare lo script. Lo trovo molto difficile prima.

AGGIORNARE:

Utilizzando jqXHR.done(), jqXHR.fail()e jqXHR.always()si può meglio manipolare con richiesta AJAX. In generale puoi definire ajax in qualche variabile o oggetto e usare quella variabile o oggetto in qualsiasi parte del tuo codice e ottenere dati più velocemente. Buon esempio:

/* Initialize some your AJAX function */
function call_ajax(attr){
    var settings=$.extend({
        call            : 'users',
        option          : 'list'
    }, attr );

    return $.ajax({
        type: "POST",
        url: "//exapmple.com//ajax.php",
        data: settings,
        cache : false
    });
}

/* .... Somewhere in your code ..... */

call_ajax({
    /* ... */
    id : 10,
    option : 'edit_user'
    change : {
          name : 'John Doe'
    }
    /* ... */
}).done(function(data){

    /* DO SOMETHING AWESOME */

});

9
Hai riferimenti credibili e verificabili?
Paul Vargas,

@PaulVargas Non faccio mai qualche test delle prestazioni ma nella mia pratica trovo che funzioni. Puoi provare da solo.
Ivijan Stefan Stipić,

1
Fornisci eventuali prove attendibili.
wonsuc,

Come sapete, le funzioni di callback sono più lente rispetto a restituire alcuni oggetti dalla funzione. A volte ha un piccolo impatto, ma a volte può essere enorme se hai molte chiamate.
Ivijan Stefan Stipić,

7

In parole semplici

$.ajax("info.txt").done(function(data) {
  alert(data);
}).fail(function(data){
  alert("Try again champ!");
});

se ottiene info.text allora avviserà e qualunque funzione tu aggiunga o se non riesci a recuperare info.text dal server quindi avviso o funzione di errore.


0

Quando eseguiremo la migrazione di JQuery da 1.xa 2x o 3.x nella nostra vecchia applicazione esistente, utilizzeremo .done, .fail invece di successo, poiché la gradazione di JQuery up diventerà obsoleta per questi metodi. esempio quando effettuiamo una chiamata ai metodi web del server, il server restituisce gli oggetti promessa ai metodi chiamanti (metodi Ajax) e questi oggetti promessa contengono metodi .done, .fail..etc. Quindi faremo lo stesso per il successo e la risposta all'insuccesso. Di seguito è riportato l'esempio (è per la richiesta POST nello stesso modo in cui possiamo costruire per il tipo di richiesta come GET ...)

 $.ajax({
            type: "POST",
            url: url,
            data: '{"name" :"sheo"}',
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false
            }).done(function (Response) {
                  //do something when get response            })
           .fail(function (Response) {
                    //do something when any error occurs.
                });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.