Aggiornare variabile Javascript
Aggiornare variabile Javascript postato il 10/04/2014 18:56:33 nel forum programmazione, open source e hosting
Ciao a tutti ho il seguente codice:
Php
$ora = date('H:i');
if($ora==$pg['ora']){
$esito = '1';
}else{
$esito = '0';
}
Javascript
var esi = <?php echo $esito;?>;
if (esi =='1'){
//Javascript evento
}
Perchè la variabile esi non si aggiorna? Eppure ho stampato il valore e in base all'esito dell'evento della pagina il php aggiorna, sapete dirmi come posso risolvere?
10/04/2014 21:55:50
No, ho tutto in una pagina php chiamata prova.php
Eccola qui:
<?php
$ora = date('H:i');
$query = mysqli_query($db, "SELECT ora FROM proviamo_tabella WHERE ora='".$data."'") or die (mysqli_error($notifiche));
$pg=mysqli_fetch_array($query);
if($ora==$pg['ora']){
$esito = '1';
}else{
$esito = '0';
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Prova di Studio</title>
<script type="text/javascript">
$(document).ready(function(){
var esi = <?php echo $esito;?>;
if (esi =='1'){
setTimeout(function() {
//Funziona Javascript
},1000);
}
});
</script>
</head>
<body>
pagina bla bla
</body>
</html>
Non so se servono altre informazioni, però io vorrei che
10/04/2014 22:04:09
Dlin dlon, io leggo questo
$(document).ready(function(){
ma non leggo da nessuna parte questo
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
La console JavaScript dovrebbe dirti qualcosa tipo $ is not defined, no?
10/04/2014 22:55:12
Non l'ho scritto io, ma c'è la libreria jquery 1.11.0
10/04/2014 23:08:40
io ho fatto una prova inserendo jquery e togliendo la query (ci ho schiantato manualmente il valore dell'orario) ed ha funzionato.
Quindi a sto punto, se non è jquery il problema, il candidato rimanente è la query. Stampati la riga che prendi da db e guarda un po' cosa ci sta dentro
10/04/2014 23:11:10
Se io faccio F5 per aggiornare la pagina la funziona funzione, scusate il gioco di parole, io vorrei che "var esi" abbia il valore aggiornato in tempo reale perchè la query funziona, restituisce 1 o 0 in tempo reale è javascript che non mi da il valore, solo quello.
10/04/2014 23:16:21
Non so come spiegarlo, vorrei che appena mi cambia il record del DB e l'esito diventi 1 parta subito la parte javascript in modo che mostri l'animazione nella pagina.
10/04/2014 23:58:04
Puoi darmi qualche informazioni in pi? Anche se devo andarmela dopo a studiare, ma un punto di partenza potrebbe essermi utile :)
11/04/2014 09:47:15
Il php viene eseguito una sola volta al caricamento della pagina.
Questo significa che se carichi la pagina, quella query verrà eseguita una sola volta e tornerà il risultato di quel momento (quindi anche js avrà quel valore).
Se a te serve che venga ripetuta ciclicamente a distanza di tempo.. molto semplicemente devi caricare la pagina in maniera regolare, così rifarà la query e tornerà il risultato aggiornato. Ci sono due approcci per far girare costantemente la query:
1. Fai ricaricare tutta la pagina
2. Fai ricaricare "un pezzo" di pagina
Mi soffermo sul punto 2, che è quello dove entra in gioco ajax. A te basta spostare la tua logica della
query su una pagina separata, che più o meno tutto quello che farà è prendere il valore aggiornato e
restituirlo (o scriverlo direttamente sulla variabile js). Questa pagina è quella che farai caricare in modo asincrono (ovvero indipendentemente dal resto dell'esecuzione della pagina) ogni X secondi. Così facendo la pagina resta ferma, ma "dietro le quinte" farà una chiamata ad una particolare pagina ogni tot, pagina che manderà in esecuzione la query e tornerà il valore che deve.
Fondamentalmente le istruzioni javascript che ti servono sono setInterval() per l'esecuzione ciclica, e $.load() (o funzione analoga) per caricare una pagina dentro un'altra in modo asincrono.
11/04/2014 09:59:11
Quindi a questo punto non mi serve altro che creare una pagina php con la query e eseguire un load della stessa a intervalli di tot secondi, così:
var auto_refresh = setInterval(
function (){
$("div#valore").load("php_laterale/sx/online.php");
}, 1000);
In questo modo poi la variabile javascript "var esi" si aggiornerà ogni secondo, gusto?
11/04/2014 10:34:12
In linea di massima sì. Fai un paio di prove e vedi cosa ottieni (consiglio: dichiara la variabile javascript nella pagina "madre", e lascia che quella importata gli cambi il valore. Javascript è [troppo] versatile, funzionerebbe in ogni caso, ma almeno eviti di perdertela in giro)
Se vuoi fare le cose un po' più carine, puoi anche provare ad usare questo
$.ajax({
type: "POST",
url: "some.php",
data: { name: "John", location: "Boston" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
Ma se invece devi fare una lista degli online completa ed autosufficiente, scrivi tutto il tuo codice (php + js + html) dentro la online.php, e falla ricaricare dentro un div con la funzione .load(). Esattamente come stai provando a fare adesso
Discussione seguita da
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Seconda Era ↗
World of Warship ↗
New Orleans ↗
Storie di Agarthi ↗
Foundation Galactic Frontier ↗
Hero Wars ↗
Enlisted ↗
Cafuné ↗
Raja Dunia ↗