IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Appels Ajax imbriqués


Sujet :

jQuery

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    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

  2. #2
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 162
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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)

  3. #3
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    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é

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Membre émérite
    Avatar de gwinyam
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 162
    Par défaut
    Ah j'avais pas vu, c'est cool ça. Super, merci Daniel, comme d'hab^^

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 17
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher une message d'attente lors d'un appel ajax
    Par Nulenprogra dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 06/11/2007, 22h15
  2. [script.aculo.us] Appel Ajax dans Ajax
    Par guiltouf dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 22/05/2007, 12h29
  3. [Dojo] Simple data grid sans appel Ajax
    Par Den's dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 14/12/2006, 08h23
  4. [AJAX] appel Ajax DOM
    Par MALAGASY dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/09/2006, 13h16
  5. [AJAX] Effectuer plusieur appel ajax
    Par shwin dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/10/2005, 16h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo