2013-02-18 22 views
5

Per quanto ne so dal the documentation, ci sono due modi distinti di gestire la risposta da una chiamata $.ajax().jquery ajax: quando utilizzare le funzioni di callback hooks vs settings?

1) Con funzioni passate nelle impostazioni $.ajax() s' oggetto:

$.ajax({ 
    success: function(){ ... }, 
    error: function(){ ... } 
}); 

2) Come chainable "ganci callback"

$.ajax({...}) 
    .done(function(){ ... }) 
    .fail(function(){ ... }) 

Quali sono le distinzioni importanti tra questi due approcci e quando dovrei sceglierne uno rispetto all'altro?

risposta

1

Se si collega la funzione direttamente alla chiamata, non c'è molta differenza nell'utilizzo. La differenza arriva quando vuoi avere la funzione di callback da qualche altra parte.

Invio la funzione di callback in un metodo:

function callForMe(callback) { 
    $.ajax({ 
    url: '...', 
    success: callback 
    }); 
} 

callForMe(function(data){ 
    // handle the response 
}); 

Ritorna la promessa da un metodo, in attesa della risposta di seguito:

function callFormMe() { 
    return $.ajax({ 
    url: '...' 
    }); 
} 

var promise = callForMe(); 
// later on: 
promise.done(function(data){ 
    // handle the response 
}); 
+0

In retrospettiva, questo dovrebbe essere ovvio per me, suppongo ... ma grazie per la chiara spiegazione ed esempi. –

1

ho sempre utilizzare il nuovo oggetto differito (cioè chainable .done, .fail ecc.), anche se in molti casi non si risparmia la lunghezza del codice.

La ragione è che mi permette di disaccoppiare i dettagli di effettuare la chiamata AJAX dalla successiva gestione della risposta.

Il disaccoppiamento mi permette di:

  1. astrarre i dati che vanno a prendere dall'elaborazione dei dati
  2. aggiungere più gestori, anche dopo la chiamata AJAX completato
  3. uso .fail gestori su helper Ajax che non hanno error: parametri
  4. uso .pipe di post-trattare i dati prima di trasmetterla ad altri gestori
  5. synchr onise with other asynchronous events

e tutto questo senza dover mai passare una richiamata direttamente alla chiamata AJAX.

Vedere this answer dove ho fornito esempi più concreti dei vantaggi.

+0

commentava e chiedeva a @Guffa se era d'accordo con questa convention. È molto più facile per me memorizzare un utilizzo di entrambi. Riesci a pensare a qualsiasi situazione in cui vi sarebbe un vantaggio apprezzabile per un altro approccio? Altrimenti, salirò in barca con te. –

+0

Ci sono numerosi vantaggi dell'approccio differito rispetto al vecchio stile e ti permette di fare cose che non puoi facilmente fare con i vecchi 'success:' handler di stile. – Alnitak

+0

Ottimo, leggi anche [l'altra tua risposta] (http://stackoverflow.com/a/14754681/6782) (+1), ottima roba. TIL –

Problemi correlati