Lo siento si esta es una pregunta de novato total, pero parece que no puedo encontrar ninguna respuesta a mi pregunta aquí en la gran web...
Estoy construyendo un sitio, donde depende que algunos de los datos en la página deban actualizarse automáticamente....
Más específico, cuando se realiza un cambio en la base de datos MySQL. Digamos, por ejemplo, que el valor de una fila en la base de datos es 10 y cambia a 11. Necesito que la página obtenga esto automáticamente de la base de datos y lo actualice en el sitio. Además, si es posible, ¿hay alguna forma de que los números "salten" un poco cuando los datos reales están cambiando?
<div class="container hero-unit"> <h1>Test Data Change</h1> <p>231</p> <p>7</p> <p>14532</p> </div>Digamos que estos números se obtienen de la base de datos, ¿cómo usaría 'AJAX' para cambiar automáticamente estos datos cuando se realiza un cambio en la base de datos?
Si esto es posible, agradecería cada contribución...
Este proceso se denomina polling . Básicamente, hay dos formas de hacer esto: long polling y short polling
En Short polling , básicamente crea un temporizador y obtiene información de un archivo php que genera datos de base de datos cada pocos segundos y luego compara los datos para ver si los datos se han actualizado o no.
Luego, se prefiere el long polling , ya que ejerce menos presión sobre el servidor. FB utiliza long polling . En este proceso, lo que básicamente hace es realizar una solicitud a un archivo php y el archivo php no responde hasta que haya una actualización en la base de datos, por lo que en lugar de realizar una solicitud ajax al archivo php cada pocos segundos aquí se realiza cada minuto o así poniendo menos presión en el servidor.
Puede encontrar un ejemplo de sondeo largo aquí https://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery
Más ejemplos aquí https://gist.github.com/jhbsk/4353139
Si está utilizando php, entonces puede seguir este código:
En tu html,
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/ libs/jquery/1.3.0/jquery.min.js"></script> <script type="text/javascript"> var auto_refresh = setInterval( function () { $('#load_tweets').load('record_count.php').fadeIn("slow"); }, 1000); // refresh every 1000 milliseconds <body> <div id="load_tweets"> </div> </body>En su archivo PHP (record_count.php)-
<?php include("db.php"); $search_word=$_GET['q']; $sql = mysqli_query($db,"Select number form Users"); $record_count=mysqli_num_rows($sql); //Display count......... echo $record_count; ?>Ref: http://www.9lessons.info/2009/07/auto-load-refresh-every-10-seconds-with.html
La respuesta corta es que una vez que el navegador tiene la página, ese es el final de la conexión. No hay forma de que el servidor informe al navegador que algo ha sucedido.
Sin embargo, utilizando JavaScript, puede realizar solicitudes post hoc al servidor, un proceso conocido como Ajax. Para esto, necesitas 2 partes:
El script PHP puede ser relativamente corto y simple:
<?php $id=@intval($_GET['id']); // get data from database into an array print json_encode($result); ?> Y JavaScript solo necesita enviar la solicitud y manejar la respuesta. El truco es hacer esto periódicamente, como con window.setInterval .
var xhr=new XMLHttpRequest(); xhr.onload=doit; var url='…?id=…'; xhr.open('get',url,true); window.setInterval(poll,1000); // every second function poll() { xhr.send(null); } function doit() { var result=this.response; result=JSON.parse(result); // etc }En ausencia de datos específicos, el código anterior no se ha probado, pero así es como debería funcionar.