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 :

Ajax sur tableau [AJAX]


Sujet :

jQuery

  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut Ajax sur tableau
    Bonjour,

    J'ai une messagerie interne au site que je développe.

    Lorsque je veux supprimer plusieurs messages, je coche les checkbox et valide.
    Je fais un appel Ajax pour ne pas avoir à recharger la page + afficher un message + faire disparaître les messages concernés.
    Le problème, c'est que le message de suppressions des messages n’apparaît qu'au 1er clic. ensuite je n'ai plus de messages jusqu'au moment ou je recharge manuellement la page.
    Et mon second problème vient du fait que si je coche plusieurs checkbox, en BDD elles seront bien supprimées, mais l'effet fadeOut ne se fait que sur une seule ligne.

    Voici mon code

    le tableau de données
    Code php : 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
    echo '<div class="error"></div><table class="mess">';
            echo '<thead><tr><th></th><th></th><th></th><th></th><th></th><th><small>'.$total_mess1.'</small></th></tr></thead><tbody>';
     
        echo '<div id="id_form_suppression">';
            echo '<FORM method="POST" action="#">';
     
        while($user=$req->fetch(PDO::FETCH_OBJ)) {
            if (($user->lu)==1) {
                echo '<tr id="ligne_'.$user->id.'"><td><input type="checkbox" id="choix" name="choix[]" value="'.$user->id.'"></td> <td><img src='.$urlImg.'mess_lu.png>';
            }
            else {
                echo '<tr id="ligne_'.$user->id.'"><td><input type="checkbox" id="choix" name="choix[]" value="'.$user->id.'"></td> <td><img src='.$urlImg.'mess_non_lu.png>';
            }
            if (($user->piece_jointe) <> ''){echo '<img src='.$urlImg.'piece_jointe.png></td>';}else{echo '</td>';}
     
                echo '<td>le '.dateFr($user->date_mess).'</td>';
                echo '<td>à '.nl2br(htmlspecialchars(ucfirst($user->prenom))). ' '.nl2br(htmlspecialchars(ucfirst($user->nom))).'</td>';
                echo '<td colspan="2"><a href="indv_env.php?id='.$user->id.'&session='.$user->session.'&lu='.$user->lu.'&token='.$user->token.'">';
                echo  nl2br(htmlspecialchars($user->titre_mess));
                echo '</a></td></tr>';
        }
                echo '</tbody></table><br>
                        <div class="mess_footer"><label><input onclick="CocheTout(this, \'choix[]\');" type="checkbox"><small>Tout sélectionner</small></label><br><br><input id="submit" type="submit" name="submit" value="Submit" onclick="ValidSuppression()" /></div></FORM></div>';

    le JS
    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
    function ValidSuppression() {
        $(document).ready(function() {
            $("#id_form_suppression").on('submit', 'form', function() {
     
                id = $('#choix:checked').val();
     
                $.ajax({
                    url: "suppr_test.php",
                    type: "post",
                    data: $('#choix:checked').serialize(),
                    //data: id,
                    success: function(data) {
                        $(".error").append(data).fadeOut(2000);
                        $("#ligne_"+id).fadeOut();
                    }
                });
            return false;
            });
        });
    }
    Requete SQL
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(isset($_POST['choix']) AND !empty($_POST['choix'])){// suppression du/des message(s)
            $count = count($_POST['choix']);
                foreach($_POST['choix'] as $id) {
                    $suppr_env = "1";
                    $res = Cnx::connectCnx()->prepare('UPDATE  messagerie m SET suppr_env='.$suppr_env.' WHERE m.id='.$id.'');
                    $res->bindValue(':id', $id);
                    $res->bindParam(':suppr_env', $suppr_env);
                    $res->execute();
                }
                echo '<div class="apres_valid_mess">'. $count .' message(s) supprimé(s)</div>';
    }
    else {
        echo '<div class="new_mess_erreur"> Aucun message n\'a été selectionné</div>';
    }
    Quelqu'un a une idée svp?

  2. #2
    Membre chevronné Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Par défaut
    slt,

    l'id doit être unique dans la page

    ++

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    Ca y est, c'est modifié
    Mais ça ne change rien à mon problème

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    J'ai remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    success: function(data) {
     $(".error").append(data).fadeOut(2000);
     $("#ligne_"+id).fadeOut();
    }
    // par
    success: function(data) {
      alert(data);
                    }
    et l'alerte est lancée a chaque fois.

    D'ou peut venir le problème?

  5. #5
    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
    data: $('#choix:checked').serialize() !!!

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

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    Heuuu, que veux tu dire?

  7. #7
    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
    Cette méthode ne s'utilise pas de cette manière.

    Que donne un console.log( $('#choix:checked').serialize() ); ?

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

  8. #8
    Membre chevronné Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Par défaut
    Slt,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    success: function(data) {
     $(".error").append(data).fadeOut(2000);
     $("#ligne_"+id).fadeOut();
    }
    Es tu sur que la variable id est connu car ça ressemble comme même à une erreur js

    ++

  9. #9
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    Il me renvoi
    choix%5B%5D=785&choix%5B%5D=784
    c'est pas ce qu'l doit faire?

  10. #10
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    Salut freddou17, la variable est reconnue.
    Mais j'ai trouvé une autre manière de faire en fait
    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
     
    // j'ai remplacé #choix par .select_case_suppr
    function ValidSuppression() { 
    	$(document).ready(function() {
    		$("#id_form_suppression").on('submit', 'form', function() {
    			console.log( $(".select_case_suppr:checked").serialize() );
    			$("input[class='select_case_suppr']:checked").each(function(i) { //efface la/les lignes concernées
    				var select_case_suppr = this.value;
    				$(this).closest('tr').fadeOut();
    			});
    			$.ajax({ 
    				url: "suppr_mess.php",
    				type: "post",
    				dataType : 'html',
    				data: $('.select_case_suppr:checked').serialize(),
    				success: function(data) {
    					$(".error").empty().append(data).delay(3000).hide(200, function(){ $(this).html('').toggle()});					
    				},
    				error : function(resultat, statut, erreur){
    					$(".error").html("Une erreur s'est produite. Veuillez recommencez ou prendre contact avec votre responsable.");
    				}
    			});
    		return false;
    		});
    	});
    }
    Voila ou j'en suis.
    Les appels ajax fonctionnent à volonté, et toutes les lignes sélectionnées sont supprimées.
    Je sais pas si c'est la meilleure façon de faire, mais ça fonctionne,
    je suis preneur de tout autres conseils

  11. #11
    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
    Citation Envoyé par jimmo Voir le message
    Il me renvoi
    choix%5B%5D=785&choix%5B%5D=784
    c'est pas ce qu'l doit faire?
    Ha !

    Si choix[]=785 et choix[]=784 sont les valeurs attendues, c'est OK.

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

  12. #12
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    Ce sont effectivement les valeurs attendues, donc je pense que ça doit être bon

    Par contre un autre soucis du même style.
    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
    function ValidEnvoiMess() { //Affiche un message de réussite ou d'erreur lors de l'envoi d'un message
        $(document).ready(function() {
            $("#mess_new").on('submit', 'form', function() {
                $("#loader").show();
                var formData = new FormData($(this)[0]);
                $.ajax({
                    url: 'new_mess_enr.php',
                    data: formData,
                    cache: false,
                    contentType: false,
                    processData: false,
                    type: 'POST',
                    success: function(data){
                        $("#loader").hide();
                        $(".error").empty().append(data).delay(3000).hide(200, function(){ $(this).html('').toggle()});
                        if(data == "ok"){
                        document.getElementById('id_destinataire').value = '0';
                        document.getElementById('titre_mess').value = '';
                        document.getElementById('message').value = '';
                        }
                    }
                });
                return false;
            });
        });
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $resultat = Cnx::connectCnx()->prepare('INSERT INTO messagerie ..............);
    $resultat->execute();
     
    echo"ok";
    si php me retourne "ok", je voudrai vider les champs.
    Et je ne vois pas du tout ou je me trompe.

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Ce genre de chose est souvent dû à la présence de caractères non affichables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($.trim(data) == "ok"){
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  14. #14
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 124
    Par défaut
    Super c'est exactement ça.
    Ca fonctionne à merveille.
    Grand merci à tous

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

Discussions similaires

  1. [WB17] Evènement "interrupteur sur tableau AJAX"
    Par EriCstoFF dans le forum WebDev
    Réponses: 4
    Dernier message: 18/03/2013, 09h40
  2. ajax et traitement sur tableau dans le code behind
    Par bobby51 dans le forum ASP.NET Ajax
    Réponses: 2
    Dernier message: 21/04/2010, 11h12
  3. [script.aculo.us] [Prototype] Effets AJAX sur un tableau
    Par metalcoyote dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 19/01/2007, 17h33
  4. loop sur tableau associatif
    Par Plawi dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/02/2005, 11h29
  5. Réponses: 25
    Dernier message: 16/07/2003, 20h41

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