codicefacile

Programmazione per TUTTI…

Refresh della pagina con PHP e AJAX

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"&gt;
<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>Italia – Live Contratti</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>
<?php
include(‘layout/fondo.php’);
?>
</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.

Articolo tratto da: http://donatantonio.altervista.org/blog/?tag=ajax-e-refresh-pagina

Annunci

Navigazione ad articolo singolo

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: