

new!








|
|
|
 |
| > Problème création d'un mini-chat. |
[ Posté par ben54120 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 11-08-2008 à 11:02 | 12 messages ]
  Bonjour à toutes et à tous !
Je vous remercierai de bien vouloir me lire jusqu'au bout.
Je ne pense pas que mon problème soit bien compliqué à résoudre.
Je bute sur un truc depuis quelques jours, et je ne trouve aucune solution, alors voila :
J'essaye donc de créer un mini-chat, sans utiliser de frames ou d'iframes. Donc c'est un simple div.
Voici le code HTML + JavaScript :
<div id="chat">
<script language="javascript" type="text/javascript">
function refreshChat()
{
document.getElementById("chat").location.reload();
}
setTimeout("refreshChat();",5000);
</script>
<?php
include("chat.php");
?>
</div>
|
|
Le fichier chat.php :
<?php
include("include.php");
$result=mysql_query("SELECT * FROM chat ORDER BY date");
while($chat = mysql_fetch_array($result))
{
echo $chat["texte"]."<br />";
}
?>
|
|
Donc selon moi il y a 2 causes possibles :
- soit le script JavaScript est incorrect
- soit il est mal placé
 
|
|
|
[ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 11-08-2008 à 12:03 | 3861 messages ]
 
J'essaye donc de créer un mini-chat, sans utiliser de frames ou d'iframes. Donc c'est un simple div.
|
|
div ou pas OSEF, si tu n'utilises pas de frames ou d'iframes, tu vas être obligé de recharger toute la page. Sauf si tu utilises de l'AJAX
Voici le code HTML + JavaScript :
<div id="chat">
<script language="javascript" type="text/javascript">
function refreshChat()
{
document.getElementById("chat").location.reload();
|
|
l'instruction n'a aucun sens ; on ne peut faire un location.reload (ou équivalent) que pour toute une page (ou le document d'une iframe)
si tu utilisais ajax, il faudrait faire document.getElementById("chat").innerXML = le_contenu_ramené_par_AJAX
}
setTimeout("refreshChat();",5000);
</script>
<?php
include("chat.php");
?>
</div>
|
|
Le fichier chat.php :
<?php
include("include.php");
$result=mysql_query("SELECT * FROM chat ORDER BY date");
while($chat = mysql_fetch_array($result))
{
echo $chat["texte"]."<br />";
}
?>
|
|
Donc selon moi il y a 2 causes possibles :
- soit le script JavaScript est incorrect
- soit il est mal placé |
|
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par ben54120 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 11-08-2008 à 12:24 | 12 messages ]
  Donc selon toi, je devrais modifier ma fonction JavaScript. OK, mais pour lui dire "le_contenu_ramené_par_AJAX", je fais comment ? Parce que ca doit me ramener mon fichier chat.php.
| [ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 11-08-2008 à 14:31 | 3861 messages ]
  http://www.editeurjavascript.com/trucs/index-cat_8.php
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par ben54120 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 11-08-2008 à 17:30 | 12 messages ]
  ok merci mais ca ne m'aide pas vraiment
je ne cherche pas à vérifier un truc en temps réel, mais actualiser le contenu d'une div régulièrement
| [ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 11-08-2008 à 18:09 | 3861 messages ]
 
ben54120 a dit
ok merci mais ca ne m'aide pas vraiment
je ne cherche pas à vérifier un truc en temps réel, mais actualiser le contenu d'une div régulièrement |
|
C'est le même principe.
Au lieu d'interroger événementiellement (sur le onkeyup) tu le fais à intervalles réguliers.
(BTW: utilise setInterval au lieu de setTimeout)
Au lieu d'interroger le serveur pour connaitre l'existence du pseudo, tu interroges le serveur pour connaitre le message à afficher.
Bref tout pareil.
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par ben54120 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 11-08-2008 à 18:16 | 12 messages ]
  OK
Je vais réfléchir un peu puis faire quelques essais. Si malgrès tout je ne parviens pas à obtenir ce que je désire, pourras-tu m'aider en me donnant un script ?
| [ Posté par ben54120 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 11-08-2008 à 19:19 | 12 messages ]
  Je rame, ca actualise toutes les 5 secondes mais ca n'affiche pas ce que me retourne le fichier chat.php.
<div id="chat">
<script language="javascript" type="text/javascript">
function refreshChat()
{
document.getElementById("chat").innerHTML = document.getElementById("texte").value;
}
setInterval("refreshChat()",5000);
</script>
<div id="texte">
<?php
include("chat.php");
?>
</div>
</div> |
|
| [ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 12-08-2008 à 10:41 | 3861 messages ]
 
ben54120 a dit
Je rame, ca actualise toutes les 5 secondes mais ca n'affiche pas ce que me retourne le fichier chat.php.
<div id="chat">
<script language="javascript" type="text/javascript">
function refreshChat()
{
document.getElementById("chat").innerHTML = document.getElementById("texte").value;
}
setInterval("refreshChat()",5000);
</script>
<div id="texte">
<?php
include("chat.php");
?>
</div>
</div> |
|
|
|
Il n'y a pas d'AJAX cela ne peut donc pas fonctionner. (en plus d'être du grand n'importe quoi )
Soit tu rafraichis toute ta page
<html>
<META http-equiv="Refresh" content="5">
<body>
<div>
<?php
include("chat.php");
?>
<div>
</body>
</html>
Soit tu utilises AJAX pour ne rafraichir que la zone
<html>
<script>
function file(fichier)
{
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(false);
xhr_object.open("GET", fichier, false);
xhr_object.send(null);
if(xhr_object.readyState == 4) return(xhr_object.responseText);
else return(false);
}
function refreshChat()
{
document.getElementById("chat").innerHTML = file("http://foo.com/chat.php");
}
setInterval("refreshChat()",5000);
</script>
<body>
<div id="chat" ><?php include("chat.php");
?></div>
</body>
</html>
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par ben54120 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 12-08-2008 à 11:45 | 12 messages ]
  Ca marche !!
Bon, après avoir pris des cours sur javaScript, il est urgent que je fasse de même pour AJAX.
AJAX est une certaine "norme d'utilisation" de JavaScript non ?
| [ Posté par ben54120 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 12-08-2008 à 12:19 | 12 messages ]
  Oups, j'ai un nouveua problème qui vient d'apparaitre !
Depuis qu'il ya le setInterval(), mon menu qui fonctionne par bloc cachés / affichés se met à déconner...
Le plus simple est que tu ailles voir ici : http://ns5.freeheberg.com/~ben54120/test/projet/index.php
En fait, lorsque l'on passe la souris de la rubrique du menu au sous-menu qui apparait, le sous-menu disparait quelques fois, uniquement lorsque l'on tombe dans l'intervalle du setInterval().
Je ne sais pas si je suis bien clair, mais regarde par toi-même et tu comprendras ce que je veux dire. Toujours est-il que, je le précise encore mais cela ne vient pas particulièrement du code du menu qui marchait très bien avant !
| [ Posté par v1nce ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 12-08-2008 à 16:04 | 3861 messages ]
 
ben54120 a dit
Oups, j'ai un nouveua problème qui vient d'apparaitre !
Depuis qu'il ya le setInterval(), mon menu qui fonctionne par bloc cachés / affichés se met à déconner...
Le plus simple est que tu ailles voir ici : http://ns5.freeheberg.com/~ben54120/test/projet/index.php
En fait, lorsque l'on passe la souris de la rubrique du menu au sous-menu qui apparait, le sous-menu disparait quelques fois, uniquement lorsque l'on tombe dans l'intervalle du setInterval().
Je ne sais pas si je suis bien clair, mais regarde par toi-même et tu comprendras ce que je veux dire. Toujours est-il que, je le précise encore mais cela ne vient pas particulièrement du code du menu qui marchait très bien avant ! |
|
Il y a n'importe quoi dans le onunload du body.
Tu n'as pas de div appelé "chat".
les onmouseover/out="color=truc" peuvent être remplacés par des styles.
utilise la console d'erreur de firefox pour tenter de deviner ce qui ne va pas.
________________ V1nce
Si je les ai oubliés les bonjour, merci et au revoir sont implicites
Brevets logiciels : dites NON !
http://petition.eurolinux.org/index.html
http://swpat.ffii.org/index.fr.html
| [ Posté par ben54120 ] [ Détails ] [ Contact ] [ Citer ]
[ Posté le 12-08-2008 à 17:52 | 12 messages ]
  Alors en fait le div appelé chat n'est présent que lorsqu'on est connecté.
Et ce qu'il y a dans le onunload c'est parce que j'utilise des sessions, et que lorsque l'utilisateur ferme le navigateur sans cliquer sur "se déconnecter", alors il n'est pas déconnecté. Je pensais pourtant que les sessions étaient détruites à la fermeture du navigateur, mais non....
Donc je vais deja virer ca, mais si tu as une astuce...
Sinon pour les menus, bah j'en sais rien...
edit : J'ai modifié quelques trucs, j'ai donc enlevé ce qu'il y avait dans le onunload, j'ai supprimé une autre boulette, mais ca fait toujours pareil. Je suis persuadé que ce sont les setInterval qu'il y a dans mon fichier "js.js" qui font tout déconner. A chaque intervalle, lorsque l'on veut aller sur le sous-menu, celui-ci se désaffiche.
J'aurais une autre parade mais mon menu perdrait tout de suite son aspect plus ou moins technique qui serait d'enlever les onmouseout qui cachent les sous-menus, mais bon ca ne serait pas très pratique...
Sinon il est bien vrai que j'ai une tuile au niveau du div qui s'appelle chat. Le setInterval va le chercher alors qu'il n'est pas là.
Je vais essayer de trouver une parade en mettant le setInterval dans une nouvelle fonction que j'appellerai en temps voulu, cela semble-t-il plus ou moins correct ?
EDIT : Bah non ca change rien en mettant les setInterval dans une fonction. Bon le plus simple et que tu voies mon fichier javascript : http://ns5.freeheberg.com/~ben54120/test/projet/js.js
PS : c'est vraiment sympa de ta part de m'aider comme ca, entre guillemets de perdre ton temps pour m'aider. Si les gens étaient tous comme toi...
[Message édité par ben54120 le 12-08-2008 à 18:43]
[Message édité par ben54120 le 12-08-2008 à 18:44]
|
|
Services email :
  Vous devez vous identifier pour profiter des services par email du forum.
|

|