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 :

Tchat avec setInterval() rafraîchissement ne fonctionne pas [AJAX]


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Webdesigner
    Inscrit en
    Juin 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juin 2014
    Messages : 176
    Par défaut Tchat avec setInterval() rafraîchissement ne fonctionne pas
    bonjour à tous, j'ai suivit à la lettre un des tutos de grafikart:
    .
    (j'y ai apporté quelques petites modifications pour mon tchat)

    mais voilà pour le setInterval, pas moyen que ma page se rafraîchisse toute seule:
    ma page de connexion au tchat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <div id="conteneur">
        <h1>tchat</h1>
        <?php if(isset($erreur)){echo "<p>".$erreur."</p>";} ?>
        <form action="" method="post">
            votre pseudo: <input type="text" name="pseudo" value="<?php echo $_SESSION["data"]["membreIdentifiant"];?>">
            <input type="submit" value="tchater"/>
     
        </form>
     
    </div>
    ma page arrivé au tchat:
    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
     
    <div style="width:94%;margin-bottom: 200px;">
        <h3>vous êtes connecté en tant que : <?php echo $membreidentifiant1;?></h3>
        <div id="connected">
     
        </div>
        <div id="tchat">
     
            <?php
            $tchat=$bdd->prepare("SELECT messagetchat.messageTchattext,messagetchat.messageTchatPseudo,messagetchat.messageTchatDate FROM messagetchat,membre WHERE messagetchat.membreId=membre.membreId ORDER BY messageTchatDate DESC Limit 15 ");
            $tchatResult=$tchat->execute([$membreidentifiant1]);
            $d=array();
            while ($data=$tchat->fetch(PDO::FETCH_ASSOC)) {
                $d[] = $data;
            }
            for($i=count($d)-1;$i>=0;$i--){
                ?>
            <p><strong><?php echo $d[$i]["messageTchatPseudo"];?></strong>(<?php echo date("d/m/Y H:i:s",$d[$i]["messageTchatDate"]);?>) : <?php echo htmlentities($d[$i]["messageTchattext"]); ?></p>
            <?php
            }
            ?>
     
        </div>
    </div>
    <div id="tchatForm" class="" style="position: fixed;bottom: 0;width: 100%;">
        <form  class="" action="#" method="post">
            <div>
            </div>
            <div class="textareaTchat">
                <textarea name="messageTchattext" style="width: 80%;"></textarea>
            </div>
            <div style="margin-top:-20px;float: right;margin-right:250px">
                <input type="submit" value="envoyer"/>
            </div>
            <div class="deconnectionTchat">
                <a href="script/deconnexion_sc_Tchat.php">Déconnection</a>
            </div>
        </form>
     
    </div>
    tchat.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
    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
    83
    84
    85
     
    /**
     * Created by cristelle on 12-05-15.
     */
    var url="tchatAjax.php";
    var lastId=0;
    var timer = setInterval(getMessages(),3000);
     
    var ctimer = setInterval(getConnected,10000);
     
    //selection du formulaire
    $(function(){
        getConnected();
        $("#tchatForm form").submit(function(){
            clearInterval(timer);
            showLoader('#tchatForm');
            var message = $("#tchatForm form textarea").val();
            $.post(url,{action:"addMessage",messageTchattext:message},function(data){
     
     
                if(data.erreur=='ok'){
                    getMessages();
                    $("#tchatForm form textarea").val("");
                }else{
     
                    alert(data.erreur);
                }
                timer = setInterval(getMessages,3000);
                hideLoader();
     
            },'json');
            return false;
        })
    });
     
    function getMessages(){
        $.post(url,{action:"getMessages",lastId:lastId},function(data){
            if(data.erreur=='ok'){
                 $("#tchat").append(data.result);
                lastId=data.lastId;
            }else{
     
                alert(data.erreur);
            }
     
     
        },'json');
        return false;
     
    }
    function getConnected(){
        $.post(url,{action:"getConnected"},function(data){
            if(data.erreur=='ok'){
                 $("#connected").empty().append(data.result);
            }else{
     
                alert(data.erreur);
            }
     
        },'json');
        return false;
     
    }
     
     
     
     
     
     
     
     
     
     
     
    //le loader
    function showLoader(div){
    $(div).append('<div class="loader loader-quart"></div>');
        $(".loader").fadeTo(500,0.6);
    }
    //cacher le loader
    function hideLoader(){
        $(".loader").fadeOut(500,function(){
            $(".loader").remove();
        });
    }
    et tchatAjax.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
    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
    83
     
    <?php
    session_start();
     
    /**
     * Created by PhpStorm.
     * User: cristelle
     * Date: 12-05-15
     * Time: 17:23
     */
    require ("bdd/bdd_biBelgium.php");
    $d=array();
    $membre=$_SESSION["data"]["membreIdentifiant"];
     
    if(!isset($membre) || empty($membre) || !isset($_POST["action"])){
            $d["erreur"]="vous devez être connecté pour tchater";
    }else{
        extract($_POST);
        $pseudo= $membre;
     
        /**
         * action addMessage
         * permet l'ajout d'un message
         */
    if($_POST["action"]=="addMessage"){
        $messageTchattext=$bdd->quote($messageTchattext);
     
        $selectId=$bdd->prepare("SELECT membreId FROM membre WHERE membreIdentifiant=?");
        $requete=$selectId->execute([$membre]);
        $row=$selectId->fetch();
        $membreId=$row[0];
     
        $insertionBddMessage=$bdd->prepare("INSERT INTO messagetchat(messageTchatPseudo,messageTchatDate,messageTchattext,membreId) VALUES (?,?,?,?)");
        $requeteInsertion = $insertionBddMessage->execute(array($pseudo,time(),$messageTchattext,$membreId));
     
        $d["erreur"]='ok';
    }
        /**
         * action getMessages
         * permet l'affichage des derniers messages
         */
        if($_POST["action"]=="getMessages"){
            $lastId=floor($lastId);
     
            $selectionBddMessage=$bdd->prepare("SELECT * FROM messagetchat WHERE idMessageTchat>$lastId ORDER BY messageTchatDate ASC");
            $requeteInsertion = $selectionBddMessage->execute();
            $d["result"]="";
            $d["lastId"]=$lastId;
            while($r=$selectionBddMessage->fetch(PDO::FETCH_ASSOC)){
                $d["result"].='<p><strong>' .$data["messageTchatPseudo"]. '</strong>('.date("d/m/Y H:i:s",$data["messageTchatDate"]).'):' .htmlentities($data["messageTchattext"]). '</p>';
                $d["lastId"]=$data["idMessageTchat"];
    }
     
            $d["erreur"]='ok';
        }
        /**
         * action getConnected
         * permet affichage dernier connecté
         */
        if($_POST["action"]=="getConnected") {
            $now=time();
            $idTcha=$_SESSION['data']['idTchat'];
     
            $sql=$bdd->prepare("SELECT connectedPseudo FROM connected WHERE $now-connectedDate>60");
            $result=$sql->execute();
            $d["result"]="connecté : ";
            while($data=$sql->fetch(PDO::FETCH_ASSOC)){
                $d["result"].= $data["connectedPseudo"].",";
            }
            $d["result"]=substr($d["result"],0,-1);//enlève le "," s'il n'y a qu'un membre
     
            $sql=$bdd->prepare("UPDATE connected SET connectedDate=:connectedDate,idConnected=:idConnected WHERE connectPseudo=:connectPseudo ");
            $sql->bindParam(':connectedDate',$now);
            $sql->bindParam(':idConnected',$idTcha);
            $sql->bindParam(':connectPseudo',$data["connectedPseudo"]);
            $sql->execute(array(':connectedDate'=>$now,':idConnected'=>$now,':connectPseudo'=>$data["connectedPseudo"]));
     
            $d["erreur"]='ok';
        }
     
    }
    echo json_encode($d);
    ?>
    je ne comprend pas pourquoi, dans le tuto, cela fonctionne et chez moi pas, pourriez-vous m'aider svp?
    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 : 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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var timer = setInterval(getMessages(),3000);

    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 confirmé
    Femme Profil pro
    Webdesigner
    Inscrit en
    Juin 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juin 2014
    Messages : 176
    Par défaut
    avec ou sans les (), cela ne change rien

  4. #4
    Membre confirmé
    Femme Profil pro
    Webdesigner
    Inscrit en
    Juin 2014
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juin 2014
    Messages : 176
    Par défaut
    bon alors pour le setInterval, j'ai trouvé la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($r=$selectionBddMessage->fetch(PDO::FETCH_ASSOC)){
                //on affiche le pseudo,la date - heure et le message
                $d["result"].='<p><strong>' .$r["messageTchatPseudo"]. '</strong>('.date("d/m/Y H:i:s",$r["messageTchatDate"]).'):' .htmlentities($r["messageTchattext"]). '</p>';
                $d["lastId"]=$r["idMessageTchat"];
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($r=$selectionBddMessage->fetch(PDO::FETCH_ASSOC)){
                //on affiche le pseudo,la date - heure et le message
                $d["result"].='<p><strong>' .$data["messageTchatPseudo"]. '</strong>('.date("d/m/Y H:i:s",$data["messageTchatDate"]).'):' .htmlentities($data["messageTchattext"]). '</p>';
                $d["lastId"]=$data["idMessageTchat"];
    il ne me reste plus maintenant que le getConnected, qui ne m'affiche plus les connecté (mais à mon avis c'est encore une histoire de variable)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/06/2007, 18h45
  2. Réponses: 2
    Dernier message: 01/05/2007, 18h50
  3. Formulaire avec pièce jointe ne fonctionne pas
    Par Icesik dans le forum Langage
    Réponses: 6
    Dernier message: 08/02/2007, 14h55
  4. simple select avec date, mais ne fonctionne pas
    Par ralcoc dans le forum Oracle
    Réponses: 5
    Dernier message: 03/07/2006, 22h59
  5. Erreur avec le SaveDialog!Ne fonctionne pas!
    Par ghan77 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 25/01/2006, 17h05

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