Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema con ajax eval y settimeout

Estas en el tema de Problema con ajax eval y settimeout en el foro de Frameworks JS en Foros del Web. EL problema es que una función de ajax quiero lanzar un eval para el resultado hasta ahí funciona bien pero cundo la función del ajax ...
  #1 (permalink)  
Antiguo 04/01/2010, 20:33
Avatar de cloudymidori  
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 9 meses
Puntos: 0
Problema con ajax eval y settimeout

EL problema es que una función de ajax quiero lanzar un eval para el resultado hasta ahí funciona bien pero cundo la función del ajax tiene un settimeout no respeta el tiempo y se ejecuta enseguida

Coloco la información de mi pagina


java script


function nuevoAjax() {
var xmlhttp=false;
try{
xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
try {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(E) { xmlhttp=false; }
}
if (!xmlhttp && typeof XMLHttpRequest!="undefined") { xmlhttp=new XMLHttpRequest(); }
return xmlhttp;
}


function f_sessionador(valor){
var ajax=nuevoAjax();
ajax.open("POST", "seccionador.php", true);
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send("seccionHTML="+valor);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
msg(ajax.responseText);
eval(ajax.responseText);
ajax = null
}
}
ajax.send(null)
}

y esta está en php


<?PHP
if(isset($_POST["seccionHTML"]) && $_POST["seccionHTML"]!=''){
$campo = $_POST["seccionHTML"];
print "
var valor = '';
valor = vHTMLText('".$campo."');
valor = (valor*1) +1;
llenaHTMLText('".$campo."',valor);
setTimeout(f_sessionador('".$campo."'),15000);
";
}
?>

según recuerdo hace mucho tiempo vi funcionando esta página pero no se cómo hacerlo porque según recuerdo se hacia una marca de tiempo o algo así para que se pueda respetar el settimeout

De antemano gracias
  #2 (permalink)  
Antiguo 04/01/2010, 23:23
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Problema con ajax eval y settimeout

Hola:

En php no puedes usar setTimeout porque no existe... tal vez haya otra cosa (quizás sleep)... si quieres temporizar puedes hacerlo con javascript...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 08/01/2010, 18:15
Avatar de cloudymidori  
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema con ajax eval y settimeout

NO ese instruccion no es de PHP es de java script por eso se imprime en pantalla y se manda a ejecutar con un eval en el ajax
  #4 (permalink)  
Antiguo 10/01/2010, 06:21
Avatar de 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.
  #5 (permalink)  
Antiguo 10/01/2010, 22:16
 
Fecha de Ingreso: enero-2010
Mensajes: 2
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Problema con ajax eval y settimeout

cambia esto setTimeout(f_sessionador('".$campo."'),15000);
por esto setTimeout(\"f_sessionador('".$campo."')\",15000);

saludos cloud
  #6 (permalink)  
Antiguo 11/01/2010, 08:57
Avatar de cloudymidori  
Fecha de Ingreso: julio-2008
Mensajes: 6
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema con ajax eval y settimeout

Gracias a todos ya quedo y tomare encuenta sus comentarios para mejorar mi codigo

Etiquetas: ajax, eval
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 23:16.