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

Problema con setInterval

Estas en el tema de Problema con setInterval en el foro de Frameworks JS en Foros del Web. Bueno, mi problema es que estoy creando una aplicación en Ajax que saque (por medio de una función que extrae datos de un archivo php ...
  #1 (permalink)  
Antiguo 30/12/2010, 17:03
 
Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Problema con setInterval

Bueno, mi problema es que estoy creando una aplicación en Ajax que saque (por medio de una función que extrae datos de un archivo php que se conecta a una DB MySQL), datos en tiempo real, por ejemplo el numero de registros total de usuarios o los mensajes que pueda tener cada usuario para que extraiga datos en tiempo real. La función es esta:

Código PHP:
function NroMsgs(ID) {
        
        
midivdocument.getElementById('NombreDIV');
        
ajax=objetoAjax();
        
ajax.open("GET""Archivo.php?UserID="+ID);
        
ajax.onreadystatechange=function() {
            if (
ajax.readyState==&& ajax.status == 200) {
                
divResultado.innerHTML ajax.responseText;
                    
            }
        }
    
        
ajax.send(null)
    } 
Al cual llamo de la siguiente manera:

Código PHP:
<div id="NombreDIV">
      <
script type="text/javascript">
                
setInterval("NroMsgs(IDUSUARIO)",500);
      
</script> 
Hasta este punto todo anda perfecto, puedo ver en tiempo real, los mensajes que le llegan a un usuario por medio de esta sentencia. PERO. Mi problema es que intento (en el mismo documento) visualizar de igual manera los usuarios que se van registrando osea que por medio de una consulta como esta:

Código PHP:
     $query mysql_num_rows(mysql_query("SELECT  * FROM users")); 
Mi problema es que cuando inserto en un documento Ej. Index.php los valores:

Código PHP:
<div id="NombreDIV">
      <
script type="text/javascript">
                
setInterval("NroMsgs(IDUSUARIO)",500);
      
</script>
</div>
<div id="OtroDiv">
      <script type="text/javascript">
                setInterval("Totalusers()",500);
      </script>
</div> 
Solo me muestra uno de ellos. A veces el primero o a veces el segundo. Ahora mi pregunta es.. ¿Sera que no se puede hacer "setInterval" a dos funciones diferentes en el mismo documento?.

Si alguno de ustedes conoce alguna forma de hacerlo soy todo oidos..

Mis agradecimientos de antemano para todo aquel experto que pueda ayudarme. Gracias.
  #2 (permalink)  
Antiguo 31/12/2010, 09:15
 
Fecha de Ingreso: diciembre-2010
Mensajes: 61
Antigüedad: 14 años
Puntos: 4
Respuesta: Problema con setInterval

El problema esta en la sincronizacion con el servidor, ya que cuando haces una petición la otra se aborta. Y haces peticiones muy rápidas y muy seguidas. Para poder realizar lo que quieres mira el siguiente link.

http://www.protofunc.com/scripts/jquery/ajaxManager/


Utiliza jquery.

Un saludo es sólo una idea.
  #3 (permalink)  
Antiguo 31/12/2010, 13:15
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Problema con setInterval

Cita:
Iniciado por yop289 Ver Mensaje
El problema esta en la sincronizacion con el servidor, ya que cuando haces una petición la otra se aborta. Y haces peticiones muy rápidas y muy seguidas. Para poder realizar lo que quieres mira el siguiente link.

http://www.protofunc.com/scripts/jquery/ajaxManager/


Utiliza jquery.

Un saludo es sólo una idea.
las peticiones con ajax no se abortan las unas a las otras (recuerda que son peticiones HTTP convencionales), depende del servidor el de rechazarlas o no si es que está muy saturado; si esto sucediera sitios como facebook serían un sueño.

en el caso se peticiones síncronas, el XMLHttpRequest no devuelve el control a js hasta que la petición sea respondida o abortada, por el cual no se puede ejecutar nada más y el navegador se bloquea.

para evitar la saturación por ancho de banda ocasionada por el exceso de peticiones, estrategias como COMET o simularlo con ajax long-polling permiten solventar y aligerar esa carga al mantener conexiones persistentes, y con ello no necesitarías un intervalo constante de peticiones ajax.
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #4 (permalink)  
Antiguo 31/12/2010, 19:58
 
Fecha de Ingreso: diciembre-2010
Mensajes: 61
Antigüedad: 14 años
Puntos: 4
Respuesta: Problema con setInterval

[QUOTE=maycolalvarez;3690521]las peticiones con ajax no se abortan las unas a las otras (recuerda que son peticiones HTTP convencionales), depende del servidor el de rechazarlas o no si es que está muy saturado; si esto sucediera sitios como facebook serían un sueño.

Estoy de acuerdo, no me he explicado correctamente, al final las peticiones no se realizan por la razón que comentaba y posiblemente hay que tener en cuenta en número de peticiones simultaneas que puede aceptar el host. Antes de rechazar más peticiones desde la misma IP. Y el explorador que usas antes de solicitar una nueva petición al host.

Internet Explorer 7 y anteriores
Servidor HTTP 1.0 (conexión de banda ancha) 4
Servidor HTTP 1.1 (conexión de banda ancha) 2
Servidor HTTP 1.0 (conexión de acceso telefónico) 4
Servidor HTTP 1.1 (conexión de acceso telefónico) 2

Internet Explorer 8

Servidor HTTP 1.0 (conexión de banda ancha) 6
Servidor HTTP 1.1 (conexión de banda ancha) 6
Servidor HTTP 1.0 (conexión de acceso telefónico) 4
Servidor HTTP 1.1 (conexión de acceso telefónico) 2


Firefox 3
Servidor HTTP 1.0 (conexión de banda ancha) 6
Servidor HTTP 1.1 (conexión de banda ancha) 6


En definitiva te sigo recomendando la opción que eches un vistazo a la web que te comentaba o que no lo hicieras a tan tiempo real, o realices peticiones sincronas.

Una vez que has recibido la respuesta de una petición llamas a la otra y así sucesivamente. Con lo que te aseguras que se ejecutan ambas peticiones.

Código:
function NroMsgs(ID) {
        
        midiv= document.getElementById('NombreDIV');
        ajax=objetoAjax();
        ajax.open("GET", "Archivo.php?UserID="+ID);
        ajax.onreadystatechange=function() {
            if (ajax.readyState==4 && ajax.status == 200) {
                divResultado.innerHTML = ajax.responseText;
                    Totalusers();  //llamas a la otra función
            }
        }
    
        ajax.send(null)
    }  

function Totalusers(); {
        
        midiv= document.getElementById('NombreDIV');
        ajax=objetoAjax();
        ajax.open("GET", "Archivo.php?UserID="+ID);
        ajax.onreadystatechange=function() {
            if (ajax.readyState==4 && ajax.status == 200) {
                divResultado.innerHTML = ajax.responseText;
                     NroMsgs(IDUSUARIO) //llamas a la otra función
            }
        }
    
        ajax.send(null)
    }

Un saludo es sólo una idea
  #5 (permalink)  
Antiguo 01/01/2011, 19:25
 
Fecha de Ingreso: diciembre-2010
Mensajes: 2
Antigüedad: 14 años
Puntos: 0
Respuesta: Problema con setInterval

La verdad amigos es que no creo que sea por porblemas de ancho de banda porque estoy haciendolo en un host local (mi propia PC). En todo caso seria como ustedes dicen que el servidor se satura. Tambien he llegado a pensar que es problema del Apache que estoy usando que es AppServ en su ultima version.

De todos modos voy a revisar ese sitio web que me sugiere Yop289. Cualquier cosa les aviso.

Etiquetas: ajax, setinterval
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 09:35.