Bonjour,
je bataille depuis quelques heures avec AJAX et les objets XHR, on se distrait comme on peut
Mon problème est le suivant. Je crée une petite horloge que j'affiche dans un coin de page web. Cette horloge est basée sur l'heure du serveur et tourne grâce à une fonction JavaScript et un setTimeout. À ce stade, ça fonctionne très bien. Mais là où ça se complique, c'est que je veux périodiquement synchroniser mon horloge avec l'heure du serveur sans recharger toute ma page bien entendu.
Au premier chargement de ma page, je récupère l'heure en PHP sous la forme du nombre de secondes (pour les besoins du test, ça me donne moins à attendre pour vérifier le fonctionnement) que ça représente avec ce petit bout de code :
<?php
function hc()
{
$h = date("H");
$m = date("i");
$s = date("s");
$heure = ($h * 60 * 60) + ($m * 60) + $s;
return $heure;
}
?>
Mais comme je veux synchroniser par exemple toutes les trente secondes sans recharger toute la page, je dois appeler ce code via un objet XHR et affecter la valeur de retour à une variable JavaScript qui va recaler mon script d'horloge.
La partie JavaScript qui ne fonctionne pas :
/**
* Méthode qui sera appelée toutes les x minutes/secondes selon un paramètre de timeout
* dans la fonction horloge.
*/
function go()
{
getXhr();
//alert(xhr);
/* On défini ce qu'on va faire quand on aura la réponse */
xhr.onreadystatechange = function()
{
/* On ne fait quelque chose que si on a tout reçu et que le serveur est ok */
if(xhr.readyState == 4)
{
alert(xhr.responseText);
if(xhr.status == 200)
{
var secondes = xhr.responseText;
}
}
else
{
alert('Il y a quelque chose de pourri dans ce code !\n'+ xhr.readyState);
}
}
xhr.open("GET", xhr_secondes, true);
xhr.send(null);
}
/**
* Fonction de rotation de l'horloge
* La fonction reçoit en paramètre l'heure courante au format HH:mn:sc
*/
function horloge(totalSecondes)
{
/* Mise à jour toutes les trente secondes */
go();
var t = secondes;
//alert(t);
totalSecondes = ((totalSecondes % 30) != 0) ? totalSecondes : ((t == 'undefined') ? totalSecondes : t);
Dans le début de la fonction horloge, mon "alert(t)"; me renvoie systématiquement "undefined".
Dans ma fonction go(), xhr.readyState me retourne 1 ou 2, parfois 3 mais jamais 4.
En résumé, ma question est la suivante : comment récupérer la valeur de retour de ma fonction PHP
hc() pour l'affecter à ma variable JavaScript
t dans
horloge() avec la fonction
go() ?
Si quelqu'un a une piste à m'indiquer, je la suivrai volontiers, merci d'avance.