Fabio Donatantonio

Resta connesso

Software Developer / Adjunct Professor

Refresh della pagina controllato dal Server – Evento lato Server

In questo breve articolo vedremo come risolvere una situazione tipica di refresh di una pagina html/php.
Immaginiamo di voler effettuare il refresh di un’intera pagina html al verificarsi di un evento lato server, ad esempio al cambiamento di una variabile di sessione o al cambiamento di stato di un database.
In altre parole vorremmo ricaricare la pagina che visiona l’utente quando decide uno script lato Server e non un javascript lato client.
Realizzeremo essenzialmente due script:

  • La pagina html/php da inviare al browser
  • Lo script lato Server che controlla il refresh

Per implementare il meccanismo di refresh utilizzeremo PHP, Javascript e logicamente Ajax per gestire il processo di controllo in background.

Vediamo il codice php dello script di controllo:

<?php
// la variabile che utilizzeremo per verificare l'esito del controllo
// 0 se non è necessario il refresh
// 1 se è da effettuare il refresh
$esito = 0;

// effettuo alcuni controlli come ad esempio una query
// una modifica a variabili di sessione o altro - dipende da voi
// nel mio esempio controllo il numero di record in una tabella...
$db_host = "localhost";
$db_user = "user";
$db_password = "pass";
$db_database = "my_database";

$connessione=mysql_connect($db_host,$db_user,$db_password);
mysql_select_db($db_database,$connessione);

$query = "SELECT COUNT(*) AS conto  FROM tabella";
$result = mysql_query($query) or die (mysql_error());

$array = mysql_fetch_array($result);
if($array['conto']>1){
     $esito = 1;
}else{
     $esito = 0;
}

echo $esito;
?>

Vediamo ora la pagina html/php che verrà inviata al Client:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Fabio Donatantonio" />
<title>Pagina ricaricata dal server</title>
<script type='text/javascript'>
var conto = null;
/* Funzione che richiama il controllo ogni 10 secondi */
function countdown(){
	Data();
	conto = setTimeout("countdown()",10000);
}

/* Funzione che inizializza il motore Ajax */
var myRequest = null;
function CreateXmlHttpReq2(handler) {
 	var xmlhttp = null;
	try {
    	xmlhttp = new XMLHttpRequest();
  	}catch(e){
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  xmlhttp.onreadystatechange = handler;
  return xmlhttp;
}

/* Funzione che verifica il responso della procedura di controllo
    se restituisce 1 allora effettua il refresh */
function myHandler() {
    if (myRequest.readyState == 4 && myRequest.status == 200) {
        if(myRequest.responseText=='1'){
        	var r = Math.random();
        	location.href = "index.php?rand="+escape(r)+"";
        }
    }
}

/* Funzione che invia la richiesta http alla funzione di controllo lato Server */
function Data(){
	var r = Math.random();
	myRequest = CreateXmlHttpReq2(myHandler);
	myRequest.open("GET","controllo.php?rand="+escape(r));
	myRequest.send(null);
}
</script>
</head>
<body>
<div align="center">
<fieldset class="corpo">
<legend>Refresh gestito dal Server</legend>
<div class='corpo'>
La pagina è stata aggiornata dal Server in data <?php date('d-m-Y')." alle ore ".date('G:i:s');?> !
</div>
<script type="text/javascript">
countdown();
</script>
</fieldset>
</div>
</body>
</html>

In questo esempio lo script javascript richiama la procedura di controllo in background ogni 10 secondi utilizzando Ajax. La procedura (controllo.php) restituisce 1 se è richiesto il refresh della pagina, 0 altrimenti.

Logicamente il file controllo.php va personalizzato alle proprie esigenze, così come può essere modificato l’intervallo tra un controllo e l’altro lato Server.
Questo esempio può essere ad esempio utile ad aggiornare una chat PHP qualora venga inserito un nuovo messaggio in database, evitando quindi che l’aggiornamento sia dipendente esclusivamente da un timer che non tiene conto dell’effettivo cambiamento di stato del database.

Fabio Donatantonio

Fabio Donatantonio. Analista e sviluppatore full-stack di applicazioni web in linguaggio PHP. Professore a Contratto per le cattedre di Fondamenti di Informatica e Archivistica Digitale presso Università degli Studi eCampus. Dal 2008 curatore del sito www.donatantonio.net, da sempre appassionato di programmazione, mare, sigari e... musica.

Ti potrebbe piacere anche

Ajax con JQuery

Settembre 16, 2010

Leave a reply

Your email address will not be published. Required fields are marked *

 

Didattica

Università degli Studi eCampus
Data Evento
09/02/2021
14:30
Esame Archivistica Digitale e Informatica per le Scienze Umane - Cds Letteratura, Lingua e Cultura Italiana - Lettere
09/02/2021
14:30
Esame Introduzione all'Archivistica Digitale e all'Informatica per le Scienze Umane - Cds Letteratura, Arte, Musica e Spettacolo - Lettere
09/02/2021
17:30
Esame Abilità Informatiche e Telematiche - Cds Design e Discipline della Moda - Lettere
09/02/2021
17:30
Esame Abilità Informatiche e Telematiche - Cds Letteratura, Arte, Musica e Spettacolo - Lettere
Risorse
Guida HTML/CSS per principianti (link)
Introduzione agli ipertesti (link)
Esercizi guidati in Java (link)
Intelligenza artificiale (link)
Libri
Fondamenti di Informatica (2011) (link)
Informatica per le Scienze Umane (2011) (link)
Fondamenti di Informatica (2014) (link)
Pagina Docente
uniecampus.it - Scheda Docente (link)
Contatti
fabio.donatantonio[at]uniecampus.it

JWhisper, sviluppato presso il Dipartimento di Informatica Applicata dell'Università degli Studi di Salerno:

Stay Connected

Twitter

Le mie foto

Foto di Fabio Donatantonio
×