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

refrescar varios divs cada "x" segundos

Estas en el tema de refrescar varios divs cada "x" segundos en el foro de Frameworks JS en Foros del Web. Hola amigos, les cuento el viernes me puse a estudiar javascript, ayer DHTML, hoy AJAX XD, por lo mismo verán que no soy ni por ...
  #1 (permalink)  
Antiguo 21/03/2011, 00:28
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
refrescar varios divs cada "x" segundos

Hola amigos, les cuento el viernes me puse a estudiar javascript, ayer DHTML, hoy AJAX XD, por lo mismo verán que no soy ni por mucho muy ducho en este tema, pero por lo menos lo medio leo, me encontre un código que refresca un div cada x segundos. el mismo lo pueden ver en esta web.

http://vcomputadoras.com/usa-ajax-pa...omment-page-1/

excelente codigo la verdad funciona perfecto.

pero mi necesidad consiste en refrescar 3 divs al unisono

he querido modificar dicho código de esta forma

Código Javascript:
Ver original
  1. // Timestamp for preventing IE caching the GET request
  2.     var fetch_unix_timestamp ="";// lets declare the variable
  3.  
  4.     fetch_unix_timestamp = function()
  5.     {
  6.         return parseInt(new Date().getTime().toString().substring(0, 10))
  7.     }
  8.  
  9.     var timestamp = fetch_unix_timestamp();
  10.     var nocacheurl = url+"?t="+timestamp;
  11.     var nocacheurl2 = url2+"?t="+timestamp;
  12.     var nocacheurl3 = url3+"?t="+timestamp;
  13.     var nocacheurl4 = url4+"?t="+timestamp;
  14.  
  15. // The code...
  16.  
  17.     xmlHttp.onreadystatechange=function()
  18.     {
  19.         if(xmlHttp.readyState==4)
  20.         {
  21.             document.getElementById(divid).innerHTML=xmlHttp.responseText;
  22.             document.getElementById(divid2).innerHTML=xmlHttp.responseText;
  23.             document.getElementById(divid3).innerHTML=xmlHttp.responseText;
  24.             document.getElementById(divid4).innerHTML=xmlHttp.responseText;
  25.             setTimeout('refreshdiv()',seconds*1000);
  26.         }
  27.     }
  28.     xmlHttp.open("GET",nocacheurl,true);
  29.     xmlHttp.send(null);
  30.     xmlHttp.open("GET",nocacheurl3,true);
  31.     xmlHttp.send(null);
  32.     xmlHttp.open("GET",nocacheurl4,true);
  33.     xmlHttp.send(null);
  34.     xmlHttp.open("GET",nocacheurl2,true);  
  35.     xmlHttp.send(null);
  36. }

entiendo que la primera parte del codigo original solo genera la llamada, y esta parte que yo he movido siguiendo mi lógica es la que afecta los divs de mi web
pero al hacer esto solo se actualiza el timediv2, pues depende del orden que ponga esto

xmlHttp.open("GET",nocacheurl2,true);
xmlHttp.send(null);

si pongo al final el 4 solo se actualiza el 4 y asi, ¿alguien puede ayudarme con esto?

y explicarme un poco mi error es que aun estoy demasiado verde en esta tecnologia

gracias :D
  #2 (permalink)  
Antiguo 21/03/2011, 04:25
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: refrescar varios divs cada "x" segundos

Que tal memoadian,

Si lo miras con firebug te vas a dar cuenta de lo que sucede, estas sobreecribiendo el request, en realidad en tu caso precisas 1 objeto xmlhttprequest por peticion, deberias separar la creacion del objeto del updater, podria ser algo asi:

index.html
Código HTML:
Ver original
  1. <title>Refresca un div tag sin necesidad de refrescar toda la pagina</title>
  2.     <script src="ajax.js"></script>
  3. </head>
  4.     <div id="contenido">
  5.         <h3>Refrescar div's tag con Ajax</h3>
  6.         <div id="timediv">
  7.         </div>
  8.         <div  id="timediv2">
  9.         </div>
  10.         <div id="timediv3">
  11.         </div>
  12.         <div id="timediv4">
  13.         </div>
  14.     </div>
  15. </body>
  16. </html>

tiempo.php
Código PHP:
Ver original
  1. // Formateamos la salida de la variable.
  2.  
  3. $str = "It is %a on %b %d, %Y, %X - Time zone: %Z";
  4.  
  5. // Printeamos el resultado
  6.  
  7. echo (gmstrftime($str,time()));

ajax.js
Código Javascript:
Ver original
  1. function newXMLHttpRequest(){
  2.     var xmlHttp;
  3.     try{
  4.         xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
  5.     } catch (e){
  6.         try{
  7.             xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
  8.         } catch (e){
  9.             try{
  10.                 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  11.             } catch (e){
  12.                 alert("Tu explorador no soporta AJAX.");
  13.                 return false;
  14.             }
  15.         }
  16.     }
  17.     return xmlHttp;
  18. }
  19.  
  20. var requests = {}
  21.  
  22. function refreshdiv(url, container, seconds){
  23.    
  24.     if(!requests[container]) requests[container] = newXMLHttpRequest();
  25.     var xmlHttp = requests[container];
  26.     // Timestamp for preventing IE caching the GET request
  27.     var fetch_unix_timestamp = '';// lets declare the variable
  28.  
  29.     fetch_unix_timestamp = function() {
  30.         return parseInt(new Date().getTime().toString().substring(0, 10))
  31.     }
  32.  
  33.     var timestamp = fetch_unix_timestamp();
  34.     var nocacheurl = url + '?t=' + timestamp;
  35.    
  36.     xmlHttp.onreadystatechange = function() {
  37.         if(xmlHttp.readyState==4){
  38.             document.getElementById(container).innerHTML = container + '::' + xmlHttp.responseText;
  39.             setTimeout(function(){refreshdiv(url, container, seconds)}, seconds * 1000);
  40.         }
  41.     }
  42.     xmlHttp.open('GET', nocacheurl, true);
  43.     xmlHttp.send(null);
  44. }
  45.  
  46.  
  47. window.onload = function startrefresh(){
  48.     refreshdiv('tiempo.php', 'timediv', 1);
  49.     refreshdiv('tiempo.php', 'timediv2', 3);
  50.     refreshdiv('tiempo.php', 'timediv3', 5);
  51.     refreshdiv('tiempo.php', 'timediv4', 8);
  52. }


lo que deberias hacer es cambiar las opciones en refreshdiv por las correspondientes a tus 4 peticiones.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 21/03/2011, 04:54
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 5 meses
Puntos: 641
Respuesta: refrescar varios divs cada "x" segundos

Eres un master

no se por que no lo pensé, si uno trabaja solo la conexion, entonces separar en otra funcion, el refresh, y con parametros. que burro, pero bueno apenas lo estaba desenredando, mi otra solucion medio hecha era un while que generara una funcion incrementable, que funcionaba, pero era un codigo muy mediocre, gracias amigo.

+karma
  #4 (permalink)  
Antiguo 10/06/2013, 14:54
 
Fecha de Ingreso: junio-2013
Mensajes: 14
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: refrescar varios divs cada "x" segundos

me pueden ayudar.... necesito que cada div se actualice con una consulta diferente, como puedo hacer eso..??? de verdad necesito ayuda no tengo idea de como hacerlo

Etiquetas: ajax, refrescar, segundos
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 20:13.