Retroceder   Foros del Web > Programación para sitios web > AJAX

Respuesta
 
Herramientas Desplegado
Antiguo 15-sep-2007, 12:12   #1 (permalink)
ZiTAL tiene algunos puntos positivos de karma
 
Avatar de ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.179
Idea MiniChat con PHP/AJAX

Bueno estaba aburrido y he hecho un mini-chat en php/ajax, es muy facil de comprender y bueno esta bien para empezar con esto del Ajax:

ajax.js
Código:
function ajaxFunction01()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
  } 
function ajaxFunction02()
  {
  var xmlHttp;
  try
    {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
    return xmlHttp;
    }
  catch (e)
    {
    // Internet Explorer
    try
      {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      return xmlHttp;
      }
    catch (e)
      {
      try
        {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        return xmlHttp;
        }
      catch (e)
        {
        alert("Your browser does not support AJAX!");
        return false;
        }
      }
    }
  }
index.php
Código PHP:
<?php
if($_GET["Bota"]=="bai")
 {
  
$file fopen("file.txt""a");
  
fwrite($file,date("Y/m/d - H:i:s")." ".$_REQUEST["text"]."\n");
  
fclose($file);
  exit();
 }
elseif(
$_GET["Leidu"]=="bai")
 {
  
$file fopen("file.txt""r");
  while (!
feof($file)) 
   {
    
$buffer fgets($file4096);
    echo 
$buffer."<br />";
   }
  
fclose($file);
  exit();
 }
?>
Código HTML:
<html>
<head>
<title>Txat-tsue :)</title>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript"> 
function fajax()
{
    var text = document.getElementById('text').value;
    var ajax=ajaxFunction01();
    ajax.open("POST","?Bota=bai",true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax.send("text="+text);
    document.getElementById('text').value="";
    document.getElementById('text').focus();
    fajax2();
}
function fajax2()
 {
    var ajax=ajaxFunction02();
    ajax.onreadystatechange=function()
      {
      if(ajax.readyState==4)
        {
        document.getElementById('txat').innerHTML=ajax.responseText;
        }
      else
       {
        document.getElementById('txat').innerHTML="kargaten...";
       }
      }
    ajax.open("GET","?Leidu=bai",true);
    ajax.send(null);    
 } 
setInterval("fajax2()",500);
</script>
</head>
<body>
<input type="text" id="text" size="50" maxlength="50" />
<input type="button" value="bota" onclick="fajax()" />
<div id="txat">
</div>
<script type="text/javascript">
    document.getElementById('text').value="";
    document.getElementById('text').focus();
 fajax2();
</script>
</body>
</html>
Bueno solo necesitamos un archivo llamado file.txt con los permisos correspondiestes de escritura en caso de duda
Código:
chmod 777 file.txt
En ajax.js he tenido que poner 2 objetos ajax ya que no se puede utilizar uno para mas de una funcion.

Bueno me voy de fiesta que son fiestas!!!!

Se me olvido comentar que con una base de datos seria mas optimo hacerlo pero bueno es que en mi pclinuxos no tengo mysql instalado ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
ZiTAL está desconectado   Responder Citando
Antiguo 15-sep-2007, 19:07   #2 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

No me va, me aparecen cuadros de texto uno detras de otro, van apareciendo sin más pero no pasa nada.
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 16-sep-2007, 05:19   #3 (permalink)
ZiTAL tiene algunos puntos positivos de karma
 
Avatar de ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.179
Re: MiniChat con PHP/AJAX

que navegador usas? Es que no tengo windows y no puedo probarlo en internet explorer.

Lo he probado en firefox.

De todas formas puedes cambiar la parte de:

setInterval("fajax2()",500);

y en vez de ponerle 500 ponerle un numero mas grande para que no actualize tan rapido ;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
ZiTAL está desconectado   Responder Citando
Antiguo 16-sep-2007, 07:09   #4 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Uso firefox también, como debe ser :p

Actualiza a cada segundo, o un poco más rápido tal vez, y solo aparece el cuadro de introducción de texto y el boton de enviar, pero aunque escriba no pasa nada.
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 16-sep-2007, 07:26   #5 (permalink)
ZiTAL tiene algunos puntos positivos de karma
 
Avatar de ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.179
Re: MiniChat con PHP/AJAX

lo he subido aqui y funciona:

http://usuarios.lycos.es/zitalman3/

no se que problema puedes tener, seguramente seran los permisos del archivo file.txt
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
ZiTAL está desconectado   Responder Citando
Antiguo 16-sep-2007, 08:10   #6 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

:o Si que funciona :S y encima es justo lo que busco

Voy a ver. Gracias tio :P


Una cosa, se podria hacer que el refresco general en la web, (del chat me refiero) fuera solo cuando alguien envia un mensaje? Hacerse imagino que se podrá claro pero.. es muy dificil?
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP

Última edición por AbdelioR; 17-sep-2007 a las 08:29.
AbdelioR está desconectado   Responder Citando
Antiguo 16-sep-2007, 08:35   #7 (permalink)
ZiTAL tiene algunos puntos positivos de karma
 
Avatar de ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.179
Re: MiniChat con PHP/AJAX

Eso se debe a:

ajax.open("GET","?Leidu=bai",true);

hace referencia a la misma pagina, podria haber puesto

ajax.open("GET","index.php?Leidu=bai",true);

que como puedes hay un exit en la condicion, por eso no sigue cargando la pagina.

Con un HTML no podras verlo funcionar.

Respondiendo a tu pregunta, se podria cargar solo cuando alguien metiese una entrada, pero igualmente se tendria que comprobar cada x tiempo si alguien a metido algo.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
ZiTAL está desconectado   Responder Citando
Antiguo 16-sep-2007, 08:37   #8 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

No te entendí muy bien... la solución que dices que es, llamarlo desde un archivo php en vez de uno html?
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 16-sep-2007, 08:41   #9 (permalink)
ZiTAL tiene algunos puntos positivos de karma
 
Avatar de ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.179
Re: MiniChat con PHP/AJAX

es que no se como pretendes hacer un chat con HTML, tiene que haber algun script para guardar/mostrar los datos en el archivo.

En tu ejemplo le dices:

meteme en esta capa toda la pagina cada x segundos ya que el ajax hace referencia a la misma pagina,en la mia le pongo condiciones para que haga una cosa y otra.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
ZiTAL está desconectado   Responder Citando
Antiguo 16-sep-2007, 08:52   #10 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Vale, he puesto lo de ajax.open("GET","index.php?Leidu=bai",true); y funciona bien.

Me interesaba esto por que quiero una especie de tagboard lateral en el menu de mi web, y que salgan los mensajes nada mas enviarlos los usuarios. Si entras lo puedes ver, pero solo se refresca al refrescar la página.

Entonces, lo que te decia de hacer las comprobaciones... debe ser bastante más eficiente comprobar si hay nuevos mensajes que mostrar a cada segundo todos los que hay no?

EDIT: lo he probado en IE y no funciona.
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP

Última edición por AbdelioR; 16-sep-2007 a las 09:38.
AbdelioR está desconectado   Responder Citando
Antiguo 17-sep-2007, 05:49   #11 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Zital no nos dejes con este chat a medias! vamos a ver si lo mejoramos, no te vayas! xD
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 17-sep-2007, 05:56   #12 (permalink)
ZiTAL tiene algunos puntos positivos de karma
 
Avatar de ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.179
Re: MiniChat con PHP/AJAX

no no me he ido, no se porque no funciona en IE y al parecer tampoco en safari.

Pensaba que era por el codigo sucio que les meten los de lycos pero no es de eso ya que lo subi a :

http://zital.no-ip.org/txat/

y tampoco va, sigo buscando el fallo a ver...
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
ZiTAL está desconectado   Responder Citando
Antiguo 17-sep-2007, 07:08   #13 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Para hacer el chat más del estilo tagboard, se podrian mostrar los mensajes al reves? es decir el más reciente arriba? la cosa seria guardar los mensajes así ya en el fichero de texto no?
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 17-sep-2007, 07:15   #14 (permalink)
ZiTAL tiene algunos puntos positivos de karma
 
Avatar de ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.179
Re: MiniChat con PHP/AJAX

lo mas optimo seria hacerlo con una base de datos y hacer un

order by id desc

por ejemplo y asi te lo ordenaria sin hacer muchas historias ya que con el fichero de texto seria un poco engorroso.

A ver si me ayudais a buscar el fallo eh!!!
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
ZiTAL está desconectado   Responder Citando
Antiguo 17-sep-2007, 07:23   #15 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Vale, voy a probar de hacerlo con base de datos.
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 17-sep-2007, 07:32   #16 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Bueno, en el primer "bota bai" he introducido los mensajes en la BBDD y en el otro "leidu bai" he conectado con la BBDD y hago un "echo" igual que antes pero para cada comentario.

Hasta aquí correcto no?
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP

Última edición por AbdelioR; 17-sep-2007 a las 07:42.
AbdelioR está desconectado   Responder Citando
Antiguo 17-sep-2007, 07:42   #17 (permalink)
ZiTAL tiene algunos puntos positivos de karma
 
Avatar de ZiTAL
 
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.179
Re: MiniChat con PHP/AJAX

Leidu=bai

Lee el archivo y lo saca por pantalla

Bota=bai

Envia el comentario.

Voy a ver si puedo ingresar el mensaje por el metodo GET.
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
ZiTAL está desconectado   Responder Citando
Antiguo 17-sep-2007, 07:46   #18 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Ok, pero es optimo este sistema, de en cada segundo leer lo de la base de datos para mostrarlo? es mucha faena? que tal irian los recursos ejecutando la funciona a cada segundo?
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 18-sep-2007, 12:19   #19 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Nadie sabe como es que no funciona en IE?
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 18-sep-2007, 13:19   #20 (permalink)
gvargas no se puede cailificar en este momento
 
Avatar de gvargas
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 211
Re: MiniChat con PHP/AJAX

Cita:
Iniciado por AbdelioR Ver Mensaje
Ok, pero es optimo este sistema, de en cada segundo leer lo de la base de datos para mostrarlo? es mucha faena? que tal irian los recursos ejecutando la funciona a cada segundo?

Pues no hay otra forma de hacerlo, quiza estes pensando en que el servidor detecte actividad y luego mande al cliente información cada que se genera. Esto no lo puede hacer el protocolo HTTP.

Por lo tanto, hay que hacer peticiones periodicas para saber si hay nuevos datos.

Pero no necesariamente cada segundo..... vamos, que cada 5 0 10 segundos me parece bien.


Cita:
Iniciado por AbdelioR Ver Mensaje
Nadie sabe como es que no funciona en IE?
La siguiente función esta probada en IE y en cualquier navegador....


Código PHP:
function getAjax(){
        var 
xmlhttp=false;
        try{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); }
        catch(
e){
            try    {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
            catch(
E) { xmlhttp=false; }
        }
        if (!
xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); }
        return 
xmlhttp;


Sustituirla en las funciones que crean el objeto ajax.

Saludos
__________________
Solo con el corazón se puede ver bien.... lo escencial es invisible para los ojos.
Mi blog: http://vargasti.wordpress.com/
gvargas está desconectado   Responder Citando
Antiguo 18-sep-2007, 15:26   #21 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

La acabo de probar i va igual, en IE no refresca :/

Respecto lo del refresco, lo hago a cada segundo por que es como un chat... por eso preguntaba si era mucha faena para estar repitiendola a cada segundo.
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado   Responder Citando
Antiguo 18-sep-2007, 16:26   #22 (permalink)
gvargas no se puede cailificar en este momento
 
Avatar de gvargas
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 211
Re: MiniChat con PHP/AJAX

En ocaciones cuando se hace la petición por Ajax, no es lo mismo decir:

Código PHP:
ajax.open("POST","?Bota=bai",true);( 

que:

Código PHP:
ajax.open("post","?Bota=bai",true); 
A mi me ha pasado.... sería cuestión de probar.


Saludos
__________________
Solo con el corazón se puede ver bien.... lo escencial es invisible para los ojos.
Mi blog: http://vargasti.wordpress.com/
gvargas está desconectado   Responder Citando
Antiguo 18-sep-2007, 17:06   #23 (permalink)
AbdelioR sólo puede mejorar
 
Avatar de AbdelioR
 
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 798
Re: MiniChat con PHP/AJAX

Perfecto, creo que ya va. Lo estaba probando ahora pero no se que pasa que mi conexión a internet hoy va fatal, así que no lo he podido comprobar bien del todo, pero los mensajes aparecen en ambos exploradores ya.

gvargas, te cuento el sistema que tengo pensado para ver si me puedes orientar un poco? ni que sea con algun tutorial o algo.

Yo lo que tenia pensado era hacer esto, y que cada vez que un usuario enviara un mensaje, que en la web sonara un sonido, como un "click" para que si un usuario está viendo una sección, se entere de que un mensaje ha sido enviado.

La duda me surge ahora, primero si se puede hacer esto con ajax, y segundo, no veo en que momento hacerlo ya que el refresco del chat lo hago a cada segundo.

Bueno, pues es esto más o menos; mañana me pondré a buscar esto de enviar sonidos con ajax a ver si se puede que no tengo ni idea.

Buenas noches.
__________________
::: www.hispanaworms.com ::: Comunidad de jugadores de W:A y WWP
AbdelioR está desconectado