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

AJAX Discussion :

[AJAX] timer


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut [AJAX] timer
    Bonjour à tous,

    Je suis en train de m'amuser à développer un tchat "intelligent" qui sait répondre à des questions via des expressions régulières et également apprendre de nouvelles questions / réponses : http://iatchat.uphero.com/

    Pour l'instant le code est assez basique et la conversation très limitée, j'aimerai donc ajouter une fonctionnalité qui permettrait au bout d'un certain temps, par exemple 2 minutes durant lesquels l'utilisateur n'aurait pas parlé, de dire une banalité (par exemple : quel chaleur aujourd'hui), je pensait faire ca avec un timer en Ajax mais j'avoue que je ne sait pas trop comment démarrer, voici le code qui appel ma class Convers.php, classe qui recherche quoi répondre en fonction de la question posée :

    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    <?php
            session_start();
            if (isset($_GET['doaction']) && $_GET['doaction'] == 'sessiondestroy') {
                    session_destroy();
            }
    ?>
     
    <script type="text/javascript">
    	function getXhr() { 
    		var xhr = null;
     
    		if (window.XMLHttpRequest || window.ActiveXObject) {
    			if (window.ActiveXObject) {
    				try {
    					xhr = new ActiveXObject("Msxml2.XMLHTTP");
    				} catch(e) {
    					xhr = new ActiveXObject("Microsoft.XMLHTTP");
    				}
    			} else {
    				xhr = new XMLHttpRequest(); 
    			}
    		} else {
    			alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
    			return null;
    		}
     
    		return xhr;
    	}
     
    	function updateContent(phrase)
    	{
    		var ajaxXhr = getXhr();
     
    		ajaxXhr.onreadystatechange = function() {
    	        if (ajaxXhr.readyState == 4 && (ajaxXhr.status == 200 || ajaxXhr.status == 0)) {
    	        	document.getElementById('conversContent').innerHTML = ajaxXhr.responseText + "<br/><span style='font-weight:bold; color:#CC0000'>&lt;Vous&gt;</span> " + phrase; // Donnees textuelles recuperees
    	        }
    		};
    		var url = "getcontent.php";
    		ajaxXhr.open("GET", url, true);
    		ajaxXhr.send(null);
    	}
     
    	function sendMsg()
    	{
    		var phrase = document.getElementById('phrase').value;
     
    		updateContent(phrase);
     
    		var xhr = getXhr();
     
    		document.getElementById('phrase').value = '';
     
    		xhr.onreadystatechange = function() {
    	        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    	        	document.getElementById('conversContent').innerHTML = xhr.responseText; // Donnees textuelles recuperees
    	        }
    		};
    		var url = "iatchat.php";
    		var data = "phrase=" + phrase
    		xhr.open("POST", url, true);
    		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    		xhr.send(data);
    	}
    </script>
     
    <html>
    	<head>
    		<title>
    			Conversation avec IA Tchat 2.0
    		</title>
    	</head>
    	<body>
    		<br/><br/>
    		<div align="center">
    			<table width="700" style="border: 1px solid" cellspacing="0" cellpadding="0">
    				<tr>
    					<td style="border-bottom: 1px solid">
    						Conversation avec IA Tchat :
    					</td>
    				</tr>
    				<tr>
    					<td id="conversContent">
    						&nbsp;
    					</td>
    				</tr>
    			</table><br/>
    			Votre message : <input type="text" id="phrase" size="100" /><br/><br/>
    			<input type="button" value="Envoyer" onClick="sendMsg()" />
    			<form method="post" action="index.php?doaction=sessiondestroy">
    				<input type="submit" value="Vider la session" />
    			</form>
    		</div>
    	</body>
    </html>
    Si quelqu'un pouvait m'aider en m'indiquant simplement une voie à prendre pour ajouter ca, je pourrait faire les recherches tout seul

    Merci d'avance,
    Adrien

  2. #2
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Personne n'a d'idée ?
    Je pensait faire ca avec un setTimer dans la fonction updateContent() au moment de la récupération des données ajax, le problème c'est que je ne sait pas comment arrêter le timer si l'utilisateur écrit une nouvelle phrase

  3. #3
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Bonjour,

    Tu peux effectivement passer par un setTimeout que tu pourras arrêter via un clearTimeout:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    var timeoutBanalite = setTimeout(direBanalite, 2 * 60 * 1000); // 2min * 60 sec * 1000 millisec
    et plus loin dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    clearTimeout(timeoutBanalite);

  4. #4
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Merci à vous 2 je vais regarder ca et je vous tient au courant

  5. #5
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Ca marche nickel, encore merci

  6. #6
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Pour faire un setTimeout périodiquement, regarde du côté de setInterval.

    Et sinon pour interrompre un traitement avant son déclenchement programmé (comme dans l'exemple que tu cites, quand ton utilisateur frappe à nouveau du texte), sache que les méthodes setInterval et setTimeout retournent une référence permettant d'arrêter le timer avec clearInterval/clearTimeout...

    Tiens-nous au jus ^^

    edit : oops dsl pour le double post... pas actualisé le thread avant de poster

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

Discussions similaires

  1. Comment stopper un Timer ajax très rapide ?
    Par ArtherKing dans le forum ASP.NET Ajax
    Réponses: 0
    Dernier message: 19/06/2016, 15h25
  2. Réponses: 2
    Dernier message: 10/09/2010, 20h29
  3. Réponses: 4
    Dernier message: 07/09/2009, 12h15
  4. Timer et ajax
    Par topolino dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/02/2009, 17h06
  5. [AJAX] AJAX, timer et boucle while
    Par podidoo dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/03/2007, 20h36

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