Foros del Web » Programando para Internet » Javascript »

Autorecarga página unicamente cuando haya mensajes nuevos (mediante sentencia sql)

Estas en el tema de Autorecarga página unicamente cuando haya mensajes nuevos (mediante sentencia sql) en el foro de Javascript en Foros del Web. Buenas No sabía si poner este tema en javasript, sql o php, y he decidido ponerlo por aquí, pero si ha de cambiarse de sitio, ...
  #1 (permalink)  
Antiguo 13/09/2008, 12:38
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 4 meses
Puntos: 14
De acuerdo Autorecarga página unicamente cuando haya mensajes nuevos (mediante sentencia sql)

Buenas

No sabía si poner este tema en javasript, sql o php, y he decidido ponerlo por aquí, pero si ha de cambiarse de sitio, no tengo ningún problema.

La cuestión es que tengo una página que muestra los 10 ultimos mensajes publicados en un foro. (mediante php y sentencias sql)
Actualmente esa página se autorecarga cada 40 segundos para tener actualizados los últimos mensajes del foro.
Mi idea es la de que esa página se autorecargue unicamente cuando sea necesario, evitándo así una carga de transferencia de datos innecesaria.

Había pensado en hacer una consulta sql cada segundo en un segundo plano, por ejemplo, de modo que cada vez que el último mensaje del foro no coincida con la última consulta que hice hace 1 segundo, la página se autorecargue actualizando así los datos.

¿sabéis si esto es posible?
¿tal vez sea mejor publicarlo en javascript? Buenas

No sabía si poner este tema en javasript, sql o php, y he decidido ponerlo por aquí, pero si ha de cambiarse de sitio, no tengo ningún problema.

La cuestión es que tengo una página que muestra los 10 ultimos mensajes publicados en un foro.
Mi idea es la de que esa página se autorecargue unicamente cuando sea necesario, evitándo así una carga de transferencia de datos innecesaria.

Había pensado en hacer una consulta sql cada segundo, por ejemplo, de modo que cada vez que el último mensaje del foro no coincida con la última consulta que hice hace 1 segundo, la página se autorecargue actualizando así los datos.

¿sabéis si esto es posible?
¿se pueden hacer consultas sql en javascript sin necesidad de que la página se recargue?

Y bueno, ya si veo que esto es posible, me gustaría que tampoco sea un incordio, de modo que mientras estés leyendo los mensajes de la página y salga uno nuevo no se autorecargue al instante porque te impide navegar con tranquilidad y terminar de leer lo que estabas leyendo.
He pensado que cada vez que haya un nuevo mensaje, se recargue pero cada 40 segundos por ejemplo, de manera que si no hay mensajes nuevos, no se autorecarga nunca, pero cuando encuentre uno nuevo, a los 40 segundos se autorecargue.

Perdonad si lo he liado demasiado, espero que se entienda.

Saludos y gracias.
  #2 (permalink)  
Antiguo 13/09/2008, 17:36
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 5 meses
Puntos: 101
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Hola,
Con ajax lo podrias hacer.
Suerte
Salu2
__________________
Half Music - www.halfmusic.com
  #3 (permalink)  
Antiguo 13/09/2008, 17:42
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 5 meses
Puntos: 101
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Hola,
Prueba con esto:
Código PHP:
<script>
function 
getXMLHttpRequest(){
                var 
aVersions = [ "MSXML2.XMLHttp.5.0",
                        
"MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
                        
"MSXML2.XMLHttp","Microsoft.XMLHttp"
                
];

                if (
window.XMLHttpRequest){
                        
// para IE7, Mozilla, Safari, etc: que usen el objeto nativo
                        
return new XMLHttpRequest();
                }else if (
window.ActiveXObject){
                        
// de lo contrario utilizar el control ActiveX para IE5.x y IE6.x
                        
for (var 0aVersions.lengthi++) {
                                try {
                                    var 
oXmlHttp = new ActiveXObject(aVersions[i]);
                                    return 
oXmlHttp;
                                }catch (
error) {
                                
//no necesitamos hacer nada especial
                                
}
                    }
                }
        }
function 
ver(){
            var 
par "r="+Math.random();
            var 
url "MI_CONSULTA_PHP.PHP";
                var 
ajax getXMLHttpRequest();
            
ajax.open("POST",url,true);
            
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
                
ajax.onreadystatechange  respuesta;
            
ajax.send(par);                
                function 
respuesta(){
                        if (
ajax.readyState==4){
                                if (
ajax.status==200){
                                        
document.getElementById("ultimo").innerHTML=ajax.responseText;
                    }
                  }
                }
        }

volver_cargar=window.setInterval("ver();",1000);
</script><div id="ultimo"></div> 
Cambia lo que esta en mayuscula por el archivo de tu consulta, ejemplo del archivo de consulta:
Código PHP:
echo $dato_de_la_bd 
Suerte
Salu2
__________________
Half Music - www.halfmusic.com
  #4 (permalink)  
Antiguo 14/09/2008, 14:09
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 4 meses
Puntos: 14
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Muchas gracias pato12 ;)

El problema está en que no me funciona, algo estaré haciendo mal.

Mi archivo se llama 10ultimos.php e incluye 10 filas de una tabla con 2 columnas, vamos, una para el asunto del tema y otra para la hora.
Tiene etiquetas body y html, pero incluye php y sentencias sql.

He hecho como me has dicho, sustituir donde pone var url = "MI_CONSULTA_PHP.PHP"; por
var url = "10ultimos.php";

Pero no me funciona, la página de 10ultimos.php está estática si nadie la recarga y en la nueva página con el código que me has dado no visualizo nada.

Algo no haré correctamente...
  #5 (permalink)  
Antiguo 14/09/2008, 14:37
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 5 meses
Puntos: 101
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Hola,
Donde quieres que aparezca tienes que poner:
Cita:
<div id="ultimo"></div>
Esto es ajax
Necesitas un navegador moderno para que anda como:
IE 7
Suerte
Salu2
PD: Ami me funciona perfecto
__________________
Half Music - www.halfmusic.com
  #6 (permalink)  
Antiguo 14/09/2008, 15:42
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 4 meses
Puntos: 14
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Cita:
Iniciado por pato12 Ver Mensaje
Hola,
PD: Ami me funciona perfecto
A mi no. He probado con IE7, firefox, opera, safari. :)
No he usado ajax nunca aún, no necesita requerimientos del servidor especiales para ello ¿no?

Te explico un poco mejor para que veas donde puedo estar fallando.

Mi archivo 10ultimos.php contiene esto:
Código PHP:
<?php require("http://miforo.com/foro/ultimos.php"); 
$posts recentTopics(40null'array');
    echo 
'
        <center><table border="0">'
;
    foreach (
$posts as $post)
        echo 
'
            <tr>
            
                <td valign="top">
                     <a href="'
$post['href'], '"  target="_blank">'$post['subject'], '</a>
                    <span class="por">'
$txt[525], ' ('$post['poster']['link'], ') </span>
                    '
$post['new'] ? '' '<a href="' $scripturl '?topic=' $post['topic'] . '.msg' $post['new_from'] . ';topicseen#new" target="_blank"><img src="' $settings['images_url'] . '/' $context['user']['language'] . '/new.gif" alt="' $txt[302] . '" border="0" /></a>''
                </td>
                <td align="right" nowrap="nowrap">
                    '
$post['time'], '
                </td>
            </tr>'
;
    echo 
'
        </table></center>'
?>

Y luego he creado otro archivo llamado "autorecarga.php" con este otro código que me has dicho:
Código PHP:
<head>
<
script>
function 
getXMLHttpRequest(){
                var 
aVersions = [ "MSXML2.XMLHttp.5.0",
                        
"MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
                        
"MSXML2.XMLHttp","Microsoft.XMLHttp"
                
];

                if (
window.XMLHttpRequest){
                        
// para IE7, Mozilla, Safari, etc: que usen el objeto nativo
                        
return new XMLHttpRequest();
                }else if (
window.ActiveXObject){
                        
// de lo contrario utilizar el control ActiveX para IE5.x y IE6.x
                        
for (var 0aVersions.lengthi++) {
                                try {
                                    var 
oXmlHttp = new ActiveXObject(aVersions[i]);
                                    return 
oXmlHttp;
                                }catch (
error) {
                                
//no necesitamos hacer nada especial
                                
}
                    }
                }
        }
function 
ver(){
            var 
par "r="+Math.random();
            var 
url "http://miweb.com/10ultimos.php";
                var 
ajax getXMLHttpRequest();
            
ajax.open("POST",url,true);
            
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
                
ajax.onreadystatechange  respuesta;
            
ajax.send(par);                
                function 
respuesta(){
                        if (
ajax.readyState==4){
                                if (
ajax.status==200){
                                        
document.getElementById("ultimo").innerHTML=ajax.responseText;
                    }
                  }
                }
        }

volver_cargar=window.setInterval("ver();",1000);
</script>
</head>
<body>
<div id="ultimo"></div>  
</body> 
Saludos y gracias.
  #7 (permalink)  
Antiguo 14/09/2008, 17:16
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 5 meses
Puntos: 101
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Hola,
¿Tienes el javascript activo?
No encuentro error a eso.
Prueba preguntando en el foro de AJAX.
Suerte
Salu2
__________________
Half Music - www.halfmusic.com
  #8 (permalink)  
Antiguo 15/09/2008, 06:36
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 4 meses
Puntos: 14
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Cita:
Iniciado por pato12 Ver Mensaje
Hola,
¿Tienes el javascript activo?
Si, está activado.

Es que no llego ni siquiera a ver algo, la página de "autorecarga.php" con el código ajax se queda en blanco, no se ve ni el "10ultimos.php" de manera estática ni nada.

Ya he preguntado en el subforo de ajax, estoy esperando a ver si alguien me responde :)[/QUOTE]
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 00:02.