2010-08-31 9 views
0

J'ai eu ce problème. Dans une page Web, j'ai un DIV qui affiche un compteur (une variable PHP, $ count). J'ai aussi une fonction JS qui change la propriété INNERHTML de la DIV. Je ne suis pas capable de changer le js var sur le changement de PHP.mise à jour JS Var sur chaging d'un php var

HTML

<DIV id="counter">0</DIV> 

PHP

while (----) { 
    do_something; 
    $count++; 
} 

JS

function ChangeDiv() { 
document.getElementById("counter").innerHTML = // here the value of $count; 
} 
setinterval("ChangeDiv()",3600); 

Je veux rafraîchir la DIV toutes les secondes y insérer la valeur de $ count ... mais faire

document.getElementById("counter").innerHTML = <?php echo($count); ?>; 

est faux car il affichera uniquement la valeur initiale de $ count.

J'ai essayé d'insérer un paramètre dans la fonction ChangeDiv, mais de cette façon que je devais appeler la fonction à chaque fois que le nombre de $ a changé, faisant écho à un

echo("<script>ChangeDiv('".$count."');</script>"); 

... qui est vraiment pas fonctionnelle. Quelqu'un connaît une façon plus simple de le faire?

+0

Ou tout simplement parce que vous avez une faute de frappe dans gerElementeById – fabrik

Répondre

2

Vous devez utiliser une sorte d'implémentation AJAX pour que cela fonctionne.

Il permettra Js d'interroger votre script PHP pour obtenir une nouvelle valeur pour $count

On dirait que vous pourriez être en train d'écrire une sorte de barre de progression?

0

Notez que PHP s'exécute côté serveur et génère du code HTML/Javascript. Javascript fonctionne sur le côté client. Ce que vous auriez à faire pour afficher une barre de progression comme celle-ci est de produire des extraits de code <script> qui mettent à jour votre élément DIV. Si vous mettez la ligne

document.getElementById("counter").innerHTML = "<?php echo($count); ?>"; 

(notez les guillemets)

dans la boucle, et mise en mémoire tampon de sortie est désactivé, et l'élément counter HTML était sortie avant, vous obtiendrez une sorte de barre de progression. Toutefois, en fonction de ce que vous voulez faire derrière cette barre de progression, un indicateur de progression piloté par Ajax peut être beaucoup plus élégant.

+0

Ma situation est la suivante: dans la boucle while script PHP fait beaucoup de calculs (il faut environ 20/30 secondes), donc avant de commencer le script PHP, je publie HTML (une page qui devrait montrer le temps écoulé, l'opération effectuée et le pourcentage). Je voudrais changer HTML alors que PHP est toujours en cours d'exécution. Je ne suis pas expert avec AJAX ... J'ai regardé autour et trouvé de nombreux exemples, mais personne ne couvre ma situation. Pourriez-vous être si gentil de me donner d'autres conseils ou un lien vers quelque chose de bien pour moi. Merci d'avance Merci d'avance. – Nick

+0

@Nick vous devriez être presque là alors. Il suffit de mettre un plein ' 'dans la boucle pour qu'il soit sorti toutes les x secondes, et exécute un' ob_flush() 'directement après pour s'assurer que le code généré est immédiatement envoyé au navigateur. –