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 :

Requêtes multiples qui se lancent à tort [AJAX]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut Requêtes multiples qui se lancent à tort
    Bonjour,

    Avec le code suivant, je simule le clic sur le bouton "parcourir" de l'un des champs de type file présents dans la page, ceci pour choisir/modifier et afficher des images dans les DIV associées. Au changement de la valeur de l'un de ces inputs, je déclenche une requête ajax pour enregistrer le changement d'image dans ma bdd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    <script language="Javascript">
     
    $(document).ready(function(){
     
    //pour simuler click sur bouton "parcourir" d'un input de type file
    $(".parcours_dd").click(function(){
     
    var id_contrib_ajax = $(this).next('input').val();
     
    var el = $(".file_img"+id_contrib_ajax);
     
    if (el) {
     
    el.click();
     
    	}
     
    //bind sur changement de la valeur du champ input file
    $(".file_img"+id_contrib_ajax).change(function(){
     
    var myimg = $(".file_img"+id_contrib_ajax).val();
     
    var html = '<img style="height : 100px;width : 75px;"src="couvertures/miniatures/'+myimg+'" />';
     
    //affichage de l'image dans la DIV
    $(".image"+id_contrib_ajax).html(html);
     
    //REQUETE AJAX pour modifier le nom de la photo dans la bdd
    		$.ajax({
                    url: 'quick_modif_photo.php',  
    		type: 'POST',
                    data:{modif_photo_id : id_contrib_ajax, nom_photo: myimg},
    		dataType: "html",
     
    			success:function(data){	
    			alert(data);
     
    			}//FIN SUCCESS AJAX
     
    		});//FIN APPEL AJAX
     
    	});//FIN CHANGE INPUT FILE
     
    });//FIN CLICK PARCOURIR
     
     
    });//FIN ONREADY
     
    </script>
     
    <body>
     
    <!--HTML généré dynamiquement en PHP-->		
    <span class="parcours_dd">parcourir disque dur</span>	
     
     
    <input type="hidden" id="photo74" value= "74"/>
     
     
    <input type="file" name="file_img" class="file_img74" style="display:none;"/>
     
     
    <div class="image74"></div>
     
     
     
    <span class="parcours_dd">parcourir disque dur2</span>	
     
     
    <input type="hidden" id="photo75" value= "75"/>
     
     
    <input type="file" name="file_img" class="file_img75" style="display:none;"/>
     
     
    <div class="image75"></div>
     
    <!--HTML généré dynamiquement en PHP-->		
     
     
    </body>
    Le choix et l'affichage des photos fonctionnent.
    Mais avec Firebug, je me rends compte qu'à chaque clic (au delà du 1er) sur le même <span> "parcourir", il est généré autant de requêtes ajax simultanées que de nombre de clics. Si c'est la 2eme fois que je clique sur ce span, 2 requêtes en doublon se font en même temps; au 3eme clic ce sont 3 requêtes qui sont faites, etc. Pouvez-vous m'aider à régler ce dysfonctionnement ? Merci.

  2. #2
    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 : 75
    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
    Bonsoir

    Vous construisez un gestionnaire d'événement dans un gestionnaire d'événement ! Chaque événement "click" sur un élément $( ".parcours_dd" ) abouti à la construction d'un nouveau gestionnaire $( ".file_img"+id_contrib_ajax ).change().

    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.)

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut
    Merci de votre remarque. J'ai donc dissocier mes deux gestionnaires d'événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    $(document).ready(function(){
    $(".parcours_dd").click(function(){
    var id_contrib_ajax = $(this).next('input').val();
    var el = $(".avatar"+id_contrib_ajax);
    if (el) {
    el.click();
    	}
    });//FIN CLICK PARCOURIR
    $(".avatar"+id_contrib_ajax).change(function(){
    var mypath = $(".avatar"+id_contrib_ajax).val();
    var html = '<img style="height : 100px;width : 75px;"src="couvertures/miniatures/'+mypath+'" />';
    $(".image"+id_contrib_ajax).html(html);
    		$.ajax({
            url: 'quick_modif_photo.php',  
    	  type: 'POST',
            data:{modif_photo_id : id_contrib_ajax,nom_photo: mypath},
    	dataType: "html",
    			success:function(data){	
    			alert(data+'\n'+id_contrib_ajax);
    			}//FIN SUCCESS AJAX
    		});//FIN APPEL AJAX
    	});//FIN CHANGE INPUT FILE
    });//FIN ONREADY
    Mais du coup j'ai l'erreur normale suivante dans firebug :
    ReferenceError: id_contrib_ajax is not defined
    [Stopper sur une erreur]

    $(".avatar"+id_contrib_ajax).change(function(){
    Pour que mon système fonctionne, il convient que je récupère, lors du change, la valeur du champ hidden qui suit le <span class="parcours_dd"> que je viens de cliquer. Cette valeur me permet de cibler le bon input file et la bonne DIV pour afficher l'image. Voyez-vous comment arriver à ce résultat ? Merci.

  4. #4
    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 : 75
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $( "input[name='file_img']" ).change( function(){
    	var id_contrib_ajax = $( this ).attr( "class" ).slice( -2 ),
    		myimg = $( this ).val();
     
    	//affichage de l'image dans la DIV
    	$( "div.image" + id_contrib_ajax ).html( '<img style="height:100px;width:75px;" src="couvertures/miniatures/'+myimg+'" />' );
     
    	//REQUETE AJAX pour modifier le nom de la photo dans la bdd
    	$.ajax({
                    "url" : "quick_modif_photo.php",  
    		"type" : "POST",
                    "data" :{ "modif_photo_id" : id_contrib_ajax, "nom_photo" : myimg},
    		"dataType" : "html",
    		"success" : function( data ){	
    			alert( data );
    		}
    	});
    });

    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.)

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    Par défaut
    Merci beaucoup pour ce code fonctionnel

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

Discussions similaires

  1. [AC-2010] Requêtes liaisons multiples qui gardent le même nombre d'enreg.
    Par ZoliveR dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 19/08/2011, 15h29
  2. Requète de non correspondance multiple qui me pose soucis :s
    Par nekro dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/06/2008, 15h19
  3. Requête paramétrée qui remplit une DBLookUpComboBox
    Par navis84 dans le forum Bases de données
    Réponses: 6
    Dernier message: 02/12/2004, 21h23
  4. requête update qui marche pas
    Par MrsFrizz dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 08h16
  5. Requête SQL qui me bloque
    Par David Guillouet dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/04/2004, 14h52

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