La "nouvelle" façon de procéder depuis la version 1.5 de jQuery (janvier 2011) consiste à utiliser des objets différés au lieu de passer un fichier de type success
le rappel. Vous devez retourner le résultat de $.ajax
et ensuite utiliser le .done
, .fail
etc méthodes pour ajouter les callbacks en dehors de la $.ajax
appelez .
function getData() {
return $.ajax({
url : 'example.com',
type: 'GET'
});
}
function handleData(data /* , textStatus, jqXHR */ ) {
alert(data);
//do some stuff
}
getData().done(handleData);
Ce site découplage la gestion des rappels à partir de la gestion AJAX, vous permet d'ajouter plusieurs rappels, des rappels en cas d'échec, etc., sans jamais avoir à modifier le fichier d'origine. getData()
fonction. Séparer la fonctionnalité AJAX de l'ensemble des actions à réaliser par la suite, c'est une bonne chose ! .
Les Deferreds permettent également une synchronisation beaucoup plus facile de plusieurs événements asynchrones, ce qui n'est pas facile à faire simplement avec success:
Par exemple, je pourrais ajouter plusieurs rappels, un gestionnaire d'erreurs et attendre qu'une minuterie s'écoule avant de continuer :
// a trivial timer, just for demo purposes -
// it resolves itself after 5 seconds
var timer = $.Deferred();
setTimeout(timer.resolve, 5000);
// add a done handler _and_ an `error:` handler, even though `getData`
// didn't directly expose that functionality
var ajax = getData().done(handleData).fail(error);
$.when(timer, ajax).done(function() {
// this won't be called until *both* the AJAX and the 5s timer have finished
});
ajax.done(function(data) {
// you can add additional callbacks too, even if the AJAX call
// already finished
});
D'autres parties de jQuery utilisent également les objets différés - vous pouvez synchroniser les animations jQuery avec d'autres opérations asynchrones très facilement avec eux.