Ver Mensaje Individual
  #6 (permalink)  
Antiguo 19/05/2009, 20:32
morpheus747
 
Fecha de Ingreso: mayo-2009
Mensajes: 25
Antigüedad: 15 años
Puntos: 1
Respuesta: readyState==4????

Lo que puedes hacer es lo siguiente. tomá el archivo en PHP que ejecuta la actualización.
y haz que antes de comenzar el proces escriba un archivito.txt que contenga el número 0
cuando el proceso termine. que el script PHP modifique ese 0 por un 1
Luego en tu código ajax para iniciar el proceso haz la petición al scriptPHP1(el que procesa los cambios) y que automáticamente te devuelva un número que sea por ejemplo 2 que te indicará que el script comenzó a trabajar. una vez que te envió una respuesta READYstate cambiará a 4
y tu mira la respuesta.. si la respuesta es 2 entonces sabes que el script comenzó a funcionar
luego utiliza javascript. hay una función no me acuerdo ahora que ejecuta 1 función cada X cantidad de tiempo..
lo que tienes que hacer es mover tu GIF animada desde que recibiste el 2 como respuesta. del script1
y ejecutar una 2º función que le pida a un script PHP nº2 que revise el archivito que creó el primero
entonces si el scriptPHP2 te retorna 0
es porque el proceso del script PHP1 todavía no terminó
entonces tu sigues moviendo el GIF..
luego cuando termine el scriptPHP1 cambiará ese valor a 1
entonces cuando tu hagas la petición otra vez. verás que scriptPHP2 te retorna 1
en ese momento tu dejas de animar tu GIF y dices TODO LISTO!

EL problema:
el problema que estas padeciendo es el tiempo!
las conexiones de red tienen un tiempo máximo de respuesta.
no pueden permanecer "abiertas" por una cantidad infinita de tiempo
dependiendo de las configuraciones del servidor. hay algunos servidores que te envían un error!
y te cierran la conexión pero AL ENVIARTE el error tu detectas el fallo
pero hay otros que cierran la conexión de manera silenciosa y por lo tanto tu permaneces a la espera de que algo suceda pero en la realidad el hosting ya no está atendiendo tu petición porque su tiempo finalizó ;)
la solución entonces es crear ese "archivito pasarela" que te indicará cuando es que el proceso de actualización está en pié o si finalizó y hacer la consulta con un segundo script que revise el archivo.

TE DEJO UN SALU2