Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/07/2011, 09h48   #1
Invité régulier
 
Inscription : octobre 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 17
Points : 5
Points : 5
Par défaut Appels Ajax imbriqués

Bonjour à tous,

Je réalise une boîte de dialogue en JQuery avec la fonction dialog(). Lorsque l'on clique sur un bouton, la boite de dialogue s'affiche et une page (A) est chargée dedans par Ajax. Mais (A) possède une liste déroulante fonction des caractères entrés au clavier (recherche automatique dans la BD). Donc un autre appel Ajax effectué dans le premier.
Comment faire pour que cet autre appel fonctionne ? On m'a déjà parlé de delegate ou live une fois, mais je n'ai pas l'impression que ça fonctionne. Si c'est vraiment ça qu'il faut utiliser, pourrait-on me donner un exemple?

Merci d'avance
Lyth_o est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 09h35   #2
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Oui et non. (le premier qui dit que je dis ça parce que je suis normand je le ....)

Oui pour les delegate, non pour live.

Live
Cette méthode permet de créer à la volée un gestionnaire d'évènements sur tout nouvel élément ciblé créé dans le DOM.
Admettons que tu fasses ça :
Code :
1
2
3
$('.toto').click(function() {
    /* ... */
});
Si tu créés un nouvel élément avec la classe toto, il ne recevra ce gestionnaire d'évènement. Il le recevra par contre si tu fais ça :
Code :
1
2
3
$('.toto').live('click', function() {
    /* ... */
});
Mais attention, ceci est très coûteux en performance ! Les tests de Addy Osmani, un des développeurs du core de jQuery, annonçait près de 70% de différence de rapidité.

Delegate
Dans ton cas, les delegate ne sont pas le bon terme mais l'idée est là. Il faut que tu utilises des objets Deferred, méthodologie apportée avec jQuery 1.5 (voir http://api.jquery.com/category/deferred-object/ )
Jusqu'à jQuery 1.5, tu étais obligé de faire ça pour imbriquer des appels Ajax :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$.ajax({
	url:"disBonjour.php",
	success: function(r,s){
                alert('coucou moi je suis dans la première');
		$.ajax({
			url:"disBonjourToiAussi.php",
			success: function(r,s){
				alert('coucou moi je suis dans la deuxième');
			}
		});
	}
});
Même si cette solution est bonne et fonctionne toujours très bien, depuis jQuery 1.5, tu peux te faciliter la vie en faisant ça :
Code :
1
2
3
4
5
 
var dSayHello = $.ajax('disBonjour.php', {});
dSayHello.done(function() {
	$.ajax('disBonjourToiAussi.php', {});
});
(j'utilise le d comme préfixe à ma var parce que je récupère un objet Deferred)

Bon j'ai vachement simplifié le truc, il y a pas de paramètre supplémentaire dans les appels Ajax mais ça permet de dégager l'idée principale. Tu dois faire quelques contrôles comme toujours sur ce que te renverra via la méthode done tout comme tu devais déjà le faire sur l'évènement success.
Si tu veux gérer des appels imbriqués dans le cas d'échec de la requête, tu peux, à la place de done(), utiliser la méthode fail().

Plus de renseignements ici : http://www.mathieurobin.com/2011/02/...te-jquery-1-5/
(aux modos, j'ai regardé rapidement la FAQ, j'ai pas trouvé de QR là dessus, voir peut-être à en faire une, si j'ai le temps, j'essaierai d'en formuler une)
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 09h56   #3
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant perpétuel
Secteur : Enseignement

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767
Bonjour

FAQ jQuey : Comment puis-je utiliser l'objet jQuery.Deferred ?

Cette Q/R est une bonne introduction à ton lien, et le contenu de ton lien serrait un troisième exemple de bonne qualité
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 10h39   #4
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Ah j'avais pas vu, c'est cool ça. Super, merci Daniel, comme d'hab^^
__________________
Mon blog techno et son billet hebdomadaire sur l'actualité jQuery. Et mon blog cuisine pour une personne.
Le bouton ne masse pas les pieds, mais ça aide la communauté.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 11h10   #5
Invité régulier
 
Inscription : octobre 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 17
Points : 5
Points : 5
Bonjour,

Merci pour ta réponse très complète. Je vais me plonger là-dedans pour bien assimiler =)

Et merci à Daniel pour son apport.
Lyth_o est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h21.


 
 
 
 
Partenaires

Hébergement Web