Ver Mensaje Individual
  #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.