Les nouveautés dans jQuery 1.5: $.Deferred

Publié par Gui dans jQuery

jQuery 1.5 introduit un nouveau concept de « promesses » qui modifie (et simplifie) l’implémentation de requêtes Ajax asynchrones.

En effet, il permet d’externaliser les callbacks du contexte de la requête, ce qui a pour but d’avoir différentes fonctions de callback exécutées sans se soucier du moment ou la requête Ajax se termine.

Un bout de code vaut mieux qu’on long discours !

function doAjax(){
	return $.get('test.htm');
}

function doMoreAjax(){
	return $.get('toto.htm');
}

$.when( doAjax(), doMoreAjax() )
	.then(function(){
		console.log( 'Je ne me déclenche que lorsque les deux requêtes Ajax sont terminées' );
	})
	.fail(function(){
		console.log( 'Je ne me déclenche que si une requête ou plus a rencontré une erreur.' );
	});

L’introduction de la méthode « $.when » nous permet de définir des actions à effectuer lorsqu’une ou plusieurs conditions/fonctions ont été effectuées.

Il est même possible de créer ses propres fonctions de callback via l’objet « $.Deferred ».

function getData(){
	return $.get('/test/');
}

function showDiv(){
	var deferred = $.Deferred();

	$('#test').fadeIn("fast", deferred.resolve);

	return deferred.promise();
}

$.when( getData(), showDiv() )
	.then(function(ajaxResult){
		console.log('L\'animation et la requête Ajax sont terminées.');
	});

Autres nouveautés :

  • jQuery.sub() : créer, modifier et cloner jQuery. Possibilité de surcharger les méthodes natives de jQuery sans avoir à modifier son core.
  • Diverses améliorations de performances

Cette nouveauté, peut être un peu abstraite au début, apporte une réelle amélioration de la gestion des requêtes Ajax.

Plus d’infos :

3 commentaires

  1. Olivier C

    Cependant des scripts qui marchaient avec la version 1.3.2 bugs avec la version 1.5.1… Dommage, à cause de cela je me limite pour l’instant a des bibliothèques plus anciennes.

  2. dav_twix

    salut et merci pour ton article,
    je me pose une question sur les performances de ce nouveau modèle de callback.
    il est admis qu’il faut éviter des laisser des listeners inutiles, or ici, est-ce qu’on a moyen de stopper l’écoute d’un événement ?
    actuellement j’utilise l’objet $(document) pour propager un event avec trigger et pose et enleve les écouteurs avec on() et off(), je peux ainsi supprimer mes listeners lorsqu’ils ne sont plus utiles
    tu as un retour d’expérience sur l’utilisation des promises ?

    • Gui

Laisser une réponse à dav_twix


Post shadow