Foros del Web » Programando para Internet » Jquery »

Problemon con MiniChat (php + jquery)

Estas en el tema de Problemon con MiniChat (php + jquery) en el foro de Jquery en Foros del Web. Bueno la verdad no sabia si postearlo en el foro de ajax, o en el subforo de frameworks. Pero la verdad es algo que me ...
  #1 (permalink)  
Antiguo 25/09/2008, 06:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 33
Antigüedad: 16 años, 2 meses
Puntos: 1
Problemon con MiniChat (php + jquery)

Bueno la verdad no sabia si postearlo en el foro de ajax, o en el subforo de frameworks.
Pero la verdad es algo que me esta matando, hize un minichat con php y jquery, pero hay un problemon, en Mozilla se ejecuta lo mas bien, pero en Internet Explorer, se consumen todo los recursos cuando uso la funcion setTimeout(); lo que hace que internet se caiga,, la funcion la uso para que cada 5 segundos, 'refresque' el 'chat' y sea mas dinamico, aca dejo el javascript que le puse.

Javascript:
Código:
function minichat()
			{
					var chat_m = $("#chat").css("display");
					if (chat_m == "none") {
						$("#chat").slideDown("slow");
					}
					else {
						$("#chat").slideUp("slow");
					}
				
			}
			
			function chat() {				
				$("#texto-chat").load("chat.php");
				setTimeout("chat()", 5000);	
			}
			
			function enviarChat() {
				var texto = $("#texto-enviar").val();
				var sid = $("#sid").val();
				
				$.post(sid, { texto: texto, enviar: "Enviar" },
  				function(data){
					if (data != "") {
						alert(data);
					}
					$("#texto-chat").load("chat.php");
					$("#texto-enviar").val("");
 				 });
			}
			
			$("document").ready(function(){
				chat();
				
				$("#texto-enviar").keypress(function (e) {
					if (e.which==13){
						enviarChat();
					}
				});
				
			});
Aca el HTML:

Código:
<input type="hidden" value="{SID}" id="sid" />
		<div id='chat'>
			<div id='titulo' onmousedown="dragStart(event, 'chat')"> <img src='template/hinchadamanya/images/iconchat.png' class='icon'> <a href="#" onclick="minichat()"> Mini Chat</a></div>
			<div id='texto-chat'>
				Cargando MiniChat
			</div>
			
			<div id='enviar'>
				<!-- IF LOGGED_CHAT -->
					<input type='text' id='texto-enviar' size='30' / > <a href='#' onclick='enviarChat()'> Enviar </a>
				<!-- ELSE -->
					Necesitas estar registrado
				<!-- ENDIF -->
			</div>
		</div>
Yo stoy seguro que el problema es en la funcion chat(); cuando se ejecuta
setTimeout, en IE.
Porfavor la verdad que es urgente, si alguien me puede ayudar, se los voy agradecer muchisimo :)

Saludos



EDIT:
Estaba probando y me di cuenta, que.. en Internet Explorer toma el cache, y por mas que yo de F5 el chat muestra lo mismo hasta que borre los temporales.

Alguna manera de solucinarlo?


EDIT2:

Hize esto:
Código:
function chat() {
	$("#texto-chat").html("Actualizando!");				
	$("#texto-chat").load("chat.php");
				
	var navegador = navigator.appName; 
	if (navegador == "Microsoft Internet Explorer") {
		setTimeout("chat()", 10000);
	}
	else {
		setTimeout("chat()", 5000);
	}
}
Y no hay ningun problema, no se tranca ni nada.
Solo que cuando se usa el metodo load, carga el cache.

Cual puede ser la solucion?

Última edición por BeRMaNyA; 25/09/2008 a las 07:34
  #2 (permalink)  
Antiguo 25/09/2008, 07:45
 
Fecha de Ingreso: febrero-2008
Mensajes: 33
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: Problemon con MiniChat (php + jquery)

vamoo vamo vamo el carbonerooo vamos vamo el carboneee,

SOLUCIONADO:

header("Cache-Control: no-store, no-cache, must-revalidate");



Peñarol peñarol :D :D vamo el manya carajo
  #3 (permalink)  
Antiguo 25/09/2008, 08:02
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemon con MiniChat (php + jquery)

Contra la cache, pon en el chat.php una directiva de no-cache.

En cuanto al setTimeout:
1. No hagas setTimeout("chat()",5000) haz setTimeout(chat,5000);
2. Si lo que quieres no es un Timeout (una sola vez) sino que se refresque continuamente, tienes setInterval, que sólo necesitas llamarlo una vez y ya se ejecutará cada x milisegundos.
3. Otra alternativa es poner el timeout no desde cuando llamas al load, sino cuando vuelve la respuesta. ¿Por qué? Porque si una petición tarda más, las siguientes peticiones se van a ir acumulando cada vez más juntas (i.e. si una petición tarda 3 segundos en responder, la siguiente actualización no se pide 5 segundos después sino 2).
4. Es más, cuando escribes algo también pides el chat.php así que si escribes rápido unas pocas líneas y el refresco no va muy rápido, las lalmadas se bloquearán unas a otras y hay un límite de llamadas simultáneas que se pueden hacer.

Así que... Yo más bien haría:
Primero, quita todos los setTimeout que tienes.
Segundo, pon el Timeout únicamente asociado a la respuesta de cualquier llamada Ajax. Esto lo puedes hacer fácilmente con jQuery con ajaxComplete() (mira la documentación).

Así, sólo se va a hacer una petición tras recibir una petición anterior. Esto no es del todo robusto, porque si una petición se pierde, entonces ya no se actualiza más. Para solucionar esto, puedes utilizar un setInterval que no pida nada, pero que compruebe hace cuanto tiempo que llegó la última respuesta. Si hace más de p.ej. 10 segundos, que lance una nueva petición y ya todo vuelve al funcionamiento normal.
  #4 (permalink)  
Antiguo 25/09/2008, 08:03
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemon con MiniChat (php + jquery)

Vaya, eso me pasa por no actualizar antes de enviar la respuesta.
  #5 (permalink)  
Antiguo 13/10/2008, 17:49
 
Fecha de Ingreso: diciembre-2007
Mensajes: 13
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Problemon con MiniChat (php + jquery)

podrian explicar un poquito mas de como se utiliza setintervals en ajaxcomplete ya que la documentacion no lo escplica mucho....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:59.