Estoy teniendo problemas al intentar hacer un chat en php con Ajax por algo que segun veo por internet buscando es bastante comun que pase, y que mientras mucha gente lo ha resuelto yo no he conseguido nada aun :S..
La cosa es que el chat se conecta correctamente y mediante Ajax (usando Jquery) se lanza la llamada asincrona que va a un bucle infinito el cual si hay mensajes nuevos les envia mediante echo(.... y justo despues de este echo hace un flush para que supuestamente lo reciba Ajax y lo pinte en pantalla, la cosa es que no lo hace hasta que sale del bucle, cosa que es logica pero no es el funcionamiento que quiero, si no que en cada iteracion del bucle javascript reciba ese echo y lo dibuje.
He probado modificando el php.ini con output_buffering = off
y en el documento .php que tiene el bucle infinito he puesto al principio lo siguiente:
Código:
y nada por ahora.@apache_setenv('no-gzip', 1); @ini_set('zlib.output_compression', 0); @ini_set('implicit_flush', 1);
El codigo javascript es el siguiente:
Código:
Como veis unicamente quiero que salte el mensaje para ver que funciona, con eso me vale.function conectarChat() { $.ajax({ type: "POST", url: "scripts/php/xchatservercore.php", data: "user=xuturk", complete: function(jqXHR, textStatus) { alert(textStatus.responseText); }, success: function(msg) { alert(msg); //Si llegamos aqui quiere decir que el chat se ha desconectado. chatConectado = false; $("#lblstatus").html("Chat Desconectado"); }, error: function() { alert("Error de conexion"); } }); chatConectado = true; $("#lblstatus").html("Chat Conectado"); }
Y el codigo php del bucle es el siguiente:
Código:
Espero que me podais echar una mano.//Una vez conectado configuramos el bucle infinito: set_time_limit(0); header("Edge-control: no-store"); echo("Entrando"); flush(); ob_flush(); //Bucle infinito que escucha nuevos mensajes: while($userconnected) { ob_start(); //Mientras comprobamos si hay mensajes nuevos: echo("asdf"); ob_flush(); flush(); sleep(1); }
Muchas gracias.
Un saludo.