Ver Mensaje Individual
  #4 (permalink)  
Antiguo 10/01/2010, 06:21
Avatar de Tecna
Tecna
 
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 3 meses
Puntos: 45
Respuesta: Problema con ajax eval y settimeout

Buenas,

el motivo de utilizar setTimeout en una solicitud ajax es que el objeto XMLHttpRequest no proporciona ningún método para especificar una pausa por lo que si la petición no finaliza correctamente el navegador quedaría bloqueado. Esto con el envio asíncrono se resuelve en parte pero no siempre, además para evitar multiples solicitudes se debería desactivar el evento que lanza la solicitud con lo que si la solicitud fallara el boton que lanza el evento quedaría desactivado y la aplicación inutilizada. Para eso se utiliza setTimeout y se debería cancelar con clearTimeout cuando recibieramos la respuesta. Si finalizara el tiempo de espera y no se hubiera recibido la solicitud volveriamos a activar el evento para nuevas solicitudes y cancelariamos la anterior con el método XMLHttpRequest.abort(). Todo esto se debe hacer en el código javascript como ya te han dicho.

Te comento algunas cosas del código que adjuntabas:

Además de comprobar que ha terminado la respuesta del servidor con request.readyState == 4 también deberías comprobar que la solicitud ha tenido éxito y que la respuesta está disponible con request.status == 200.

El código que metes en la funcion anónima quedaría mas limpio si lo metieras dentro de otra funcion a la que llamaras desde la función anónima.

Deberías controlar las excepciones para cuando no exista xmlhttp.

LLamas dos veces al método send una vez pasando parametros y otra con null. Si como parece quieres usar el método POST tienes que pasar los parámetros.

A eval() hay que pasarle una cadena, si se pasa un objeto simplemente devuelve unchanged.

Espero que te sirva. Un saludo.