Problema con ajax por favor
Resuelto
marwen109
Mensajes publicados
81
Estado
Membre
-
Groarh Mensajes publicados 706 Estado Membre -
Groarh Mensajes publicados 706 Estado Membre -
Hola,
Configuración: Windows XP / Safari 533.4
He creado un script de chat con ajax y php (sin base de datos, los mensajes se almacenan en un archivo de texto con php y luego se muestran)...
en fin: mi script está aquí
*pon tu mensaje y luego haz clic en "cambiar contenido" "no se puede ingresar desde el teclado"
http://marwen.lockernerd.co.uk/
y el código:
y finalmente un archivo chateur.txt inicialmente vacío
mi problema es que mi script solo publica mensajes localmente en mi PC,
quiero saber por qué los mensajes que he publicado no se transmiten a otros internautas que están conectados a mi sitio web, y cómo corregir eso?
GRACIAS POR ADELANTADO :)
Configuración: Windows XP / Safari 533.4
He creado un script de chat con ajax y php (sin base de datos, los mensajes se almacenan en un archivo de texto con php y luego se muestran)...
en fin: mi script está aquí
*pon tu mensaje y luego haz clic en "cambiar contenido" "no se puede ingresar desde el teclado"
http://marwen.lockernerd.co.uk/
y el código:
index.html //////////////////////////////////////////// <html> <head> <style> .button{background-color:black;border:2px orange;color:orange;height:25px;} .input{border:1px black solid;height:25px;} </style> <script type="text/javascript"> function declanche(msg) { if(window.XMLHttpRequest) {// código para IE7+, Firefox, Chrome, Opera, Safari req=new XMLHttpRequest(); } else {// código para IE6, IE5 req=new ActiveXObject("Microsoft.XMLHTTP"); } req.onreadystatechange=function() { if (req.readyState == 4) { if (req.status == 200) { document.getElementById("myDiv1").innerHTML=""; document.getElementById("myDiv").innerHTML=document.getElementById("myDiv").innerHTML+req.responseText;} else { alert("error por marwen");} } else document.getElementById("myDiv1").innerHTML="<font color='red'size='5'>esperando....</font>"; } req.open("GET","fiche.php?msg="+msg,true); req.send(); } </script> </head> <body> <form name="f"> <input type="text"name="msg"> <button type="button" onclick="declanche(msg.value)"class="button">Cambiar Contenido</button><br> <div id="myDiv"><h2></h2></div> <div id="myDiv1"><h2></h2></div> </form> </body> </html> ///////////////////////////////////// fiche.php <? //apertura del archivo con adición al final $x=fopen("chateur.txt","a+"); //recuperación del mensaje pasado a través de ajax $msg=$_GET['msg']; //hacer un salto de línea para poder leer cada línea $msg="\n".$msg; fwrite($x,$msg); $ligne=file("chateur.txt"); //mostrar la última línea (mensaje recibido) echo $ligne[count($ligne)-1]."</br>"; //y cierre del archivo fclose($x); ?> y finalmente un archivo chateur.txt inicialmente vacío
mi problema es que mi script solo publica mensajes localmente en mi PC,
quiero saber por qué los mensajes que he publicado no se transmiten a otros internautas que están conectados a mi sitio web, y cómo corregir eso?
GRACIAS POR ADELANTADO :)
3 réponses
Hola,
vaya, hay muchas cosas que van mal. Bien. Vamos a intentar hacer funcionar lo que pides primero, y luego veremos los detalles :)
Así que tenemos en nuestras manos:
- una página HTML que envía mensajes por Ajax
- un script PHP que registra y devuelve el mensaje.
La palabra importante aquí es « devuelve »: el servidor responde a una solicitud, y sólo a esa (es el principio básico de la Web). En este caso, responde a la solicitud Ajax que acaba de enviar el mensaje.
Te falta la mitad de las cosas para tener una aplicación de chat completa: solo tienes la parte de emisión, hay que hacer la parte de recepción.
La solución más fácil de implementar, que puedes encontrar bastante a menudo en diversos tutoriales, es tener un segundo solicitante Ajax que interroga al servidor regularmente (cada 2 o 3 segundos). Te aconsejo que hagas también un segundo script PHP para diferenciar bien las cosas.
No te voy a hacer un tutorial, hay muchos en Internet. Ya me gustaría saber si puedes arreglártelas con la información que te acabo de dar. Si no, vuelve a hacerme tus preguntas y estaré encantado de responder ;)
vaya, hay muchas cosas que van mal. Bien. Vamos a intentar hacer funcionar lo que pides primero, y luego veremos los detalles :)
Así que tenemos en nuestras manos:
- una página HTML que envía mensajes por Ajax
- un script PHP que registra y devuelve el mensaje.
La palabra importante aquí es « devuelve »: el servidor responde a una solicitud, y sólo a esa (es el principio básico de la Web). En este caso, responde a la solicitud Ajax que acaba de enviar el mensaje.
Te falta la mitad de las cosas para tener una aplicación de chat completa: solo tienes la parte de emisión, hay que hacer la parte de recepción.
La solución más fácil de implementar, que puedes encontrar bastante a menudo en diversos tutoriales, es tener un segundo solicitante Ajax que interroga al servidor regularmente (cada 2 o 3 segundos). Te aconsejo que hagas también un segundo script PHP para diferenciar bien las cosas.
No te voy a hacer un tutorial, hay muchos en Internet. Ya me gustaría saber si puedes arreglártelas con la información que te acabo de dar. Si no, vuelve a hacerme tus preguntas y estaré encantado de responder ;)
hola, he encontrado tu indicación "interrogar al servidor regularmente". Es simple javascript.
<< setInterval("declanche('')",3000) >>
para desencadenar mi solicitud ajax regularmente.........
mi script funciona correctamente hoy, he modificado la página "fiche.php"
pero el archivo compartido "chateur.txt"
¿provocará una sección crítica? imagina que los dos procesos (los dos chaters) acceden al mismo tiempo en escritura..... ¿podemos usar un semáforo en este caso?
pienso que el uso de una base de datos es mejor que un archivo de texto,
de todos modos
Gracias por ti :=)
<< setInterval("declanche('')",3000) >>
para desencadenar mi solicitud ajax regularmente.........
mi script funciona correctamente hoy, he modificado la página "fiche.php"
pero el archivo compartido "chateur.txt"
¿provocará una sección crítica? imagina que los dos procesos (los dos chaters) acceden al mismo tiempo en escritura..... ¿podemos usar un semáforo en este caso?
pienso que el uso de una base de datos es mejor que un archivo de texto,
de todos modos
Gracias por ti :=)
Renuevo mis agradecimientos hacia ti. Voy a encontrar una solución a este problema por mi cuenta.
No te preocupes por mí :=)