IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Compte à rebours PHP Javascript ajax


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Points : 34
    Points
    34
    Par défaut [AJAX] Compte à rebours PHP Javascript ajax
    Bonjour à tous,

    J'ai un compte à rebours en php dont le code est ci-dessous :

    <?
    $nbSecondes= 360 -(mktime() % 360);
    $minutes = $nbSecondes / 60;
    $secondes = $nbSecondes % 60;
    if ($secondes<10) {
    $secondes="0".$secondes;
    }
    $compteARebours = '0' . intval($minutes) . ' : ' . $secondes;

    echo $compteARebours;
    ?>
    Pour faire défiler le compte à rebours sans recharger la page, j'utilise un script javascript -ajax.
    Celui-ci fait défiler le compte à rebours et affiche les réponses à la fin du compte à rebours sans recharger la page (c'est un jeu ou les réponses apparaissent au bout du compte à rebours).

    Les problèmes : lorsque je mets des caractères comme "0" et ":" dans la variable $compteARebours, le compte à rebours s'affiche correctement, mais que la première seconde. Ensuite, il affiche NaN (Not a Number).
    Si j'enlève les caractères, cela fonctionne. Dois-je donc modifier et rajouter quelque chose à la variable dans le php pour que cela fonctionne, ou dois-je modifier le javascript ci-dessous?

    Le second problème : lorsque je fais défiler le compte à rebours en php, en rechargeant la page, tout va bien. Il défile bien de 59 à 00 secondes.
    Par contre, et lorsque j'enlève les caractères pour faire mes tests, pour ne pas avoir le Nan, lors du premier chargement, tout va bien, mais dès qu'il arrive à 400 (pour 4 minutes 04:00), il passe alors à 399, au lieu de 359. Lorsque je recharge, alors les secondes sont de nouveau correctes...

    Un coup de main la-dessus?

    Le javascript :

    <script language=javascript>
    var x;

    function tempsSession()
    {
    var xhr_object = null;

    if(window.XMLHttpRequest) // Firefox
    xhr_object = new XMLHttpRequest();
    else if(window.ActiveXObject) // Internet Explorer
    xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    else { // XMLHttpRequest non supporté par le navigateur
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    return;
    }

    var method = "GET";
    var filename = "renvoyeTempsRestantSession.php";

    var data = null;

    xhr_object.open(method, filename, true);

    xhr_object.onreadystatechange = function() {
    if(xhr_object.readyState == 4) {
    var tmp = xhr_object.responseText;
    document.form1.tempsRestantInitial.value = tmp;
    document.form1.tempsRestant.value = tmp;
    }
    }
    xhr_object.send(data);
    }

    function Decompte() {
    //((document.form1.tempsRestant.value > 0)) ? (window.document.form1.tempsRestant.value = --valeur) : (window.clearInterval(x));
    window.document.form1.tempsRestant.value--;
    if (window.document.form1.tempsRestant.value == 0) {
    window.clearInterval(x);
    window.document.form1.submit.disabled = false;
    window.document.getElementById("reponse").style.visibility="visible";
    }

    }

    function init() {
    x = window.setInterval('Decompte()', 1000);
    }

    function initCompteur()
    {
    tempsSession();
    init();

    }


    </script>

    Merci à vous... Par avance...

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.document.form1.tempsRestant.value--;
    tu fais ici une opération avec un opérateur numérique.
    Or :
    1) un .value est de type string (au passage une synatxe plus compatible )
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms['form1'].elements['tempsRestant'].value = parseInt(document.forms['form1'].elements['tempsRestant'].value)--;
    2) ce n'est pas un numérique sur lequel doit être faite l'opération, mais sur un type date (pour passer à 03:59 au lieu de 03:99)

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Points : 34
    Points
    34
    Par défaut
    Tout d'abord, merci de prendre mon problème en considération...

    Excuse mon ignorance, mais je ne sais pas quoi faire de ton bout de code...

    Et comment faire l'opération sur un type date...

    Merci...

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par syl2042
    Excuse mon ignorance, mais je ne sais pas quoi faire de ton bout de code...
    C'était juste l'explication d'une des erreurs
    Et comment faire l'opération sur un type date...
    Tu peux t'inspirer des 2 premiers posts de cette discussion ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Points : 34
    Points
    34
    Par défaut
    Bon, je suis désolé, mais je ne vois pas...

    Si tu pouvais consacrer 2 minutes à mon pb, je t'en serais reconnaissant jusqu'à la fin de mes jours

    Lorsque je modifie mon code avec le tiens, je vois bien qu'il me prend enfin les caractères 0 et :.

    Cependant, le script ne se raffraichit plus et donc le compte à rebours est figé.

    Voici ce que j'avais :

    function Decompte() {
    window.document.form1.tempsRestant.value--;
    if (window.document.form1.tempsRestant.value == 0) {
    window.clearInterval(x);
    window.document.form1.submit.disabled = false;
    window.document.getElementById("reponse").style.visibility="visible";
    }
    Voici ce que je fais avec ton code :

    function Decompte() {
    window.document.form1.tempsRestant.value = parseInt(document.form1.tempsRestant.value)--;
    if (window.document.form1.tempsRestant.value == 0) {
    window.clearInterval(x);
    window.document.form1.submit.disabled = false;
    window.document.getElementById("reponse").style.visibility="visible";
    }
    Quant à la discussion que tu m'as transmise, je ne vois rien qui m'orienterait...

    Si tu peux m'aider sur ce coup là... J'suis pas loin...

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par syl2042
    Quant à la discussion que tu m'as transmise, je ne vois rien qui m'orienterait...
    Ben ... c'est ton script de compte à rebours (dans les 2 premiers posts)
    EDIT : le 2° est plus lisible ...

    Désolé, je n'ai pas le temps de le ré-écrire. En plus il semble bien comme ça, et il est testé ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 62
    Points : 34
    Points
    34
    Par défaut
    Je suis désolé de t'emm... avec ça, mais le compte à rebours, je l'ai...

    Voir code PHP dans mon premier post.

    La discussion que tu me transmets ne me convient pas car le compte à rebours démarre à chaque chargement de la page, ce que je ne souhaite pas...

    J'ai donc le bon PHP pour le compte à rebours, vu d'ailleurs avec le modo koopajah

    Je ne suis pas loin maintenant...

    Donc le compte à rebours fonctionne. Dans mon javascript cité plus haut, si j'utilise le mien, il ne faut pas que j'ai de caractères autres que des nombres dans ma variable.

    L'astuce que tu me donnes (parseInt) me permet de voir mes caractères, mais mon script ne se raffraichit plus, il est figé...

    Cela doit être une maudite petite chose de rien du tout, mais je bloque...

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par syl2042
    La discussion que tu me transmets ne me convient pas car le compte à rebours démarre à chaque chargement de la page, ce que je ne souhaite pas...
    Pas un pb : tu peux paramétrer le temps de départ (en utilisant ton PHP).

    Je t'ai donné ce lien car le problème qu'il te reste c'est uniquement de faire un -1 sur une date (une heure).
    Or ça ne fonctionne pas comme pour un integer (sinon 03:99 au lieu de 03:59).

    Ce script te donne juste le code de décrémentation de ta valeur et ne remet pas en cause ton PHP ...

    En fait la seule partie qu'il te faut en récupérer c'est celle-là (en modifiant la dernière ligne)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function change_timer() {
    	if (secondes > 0) {
    		secondes-= 1;
    	}
    	else {
    		if (secondes == 0 && minutes > 0) {
    			secondes = 59;
    			minutes-= 1;
    		}
    		else {
    			if (secondes == 0 && minutes == 0 && heures > 0) {
    			secondes = 59;
    			minutes = 59;
    			heure-= 1;
    			}
    		}
    	}
    	if (heures < 10) rheures = '0'+heures; else rheures = heures;
    	if (minutes < 10) rminutes = '0'+minutes; else rminutes = minutes;
    	if (secondes < 10) rsecondes = '0'+secondes; else rsecondes = secondes;
    	document.getElementById("decompte").innerHTML = rheures+':'+rminutes+':'+rsecondes;
    }
    Il te suffit de remplacer ton "--" sur la value par un appel à change_timer() (en adaptant les variables, qui doivent être globale pour cette fonction) ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/01/2011, 22h40
  2. [AJAX] 'is not defined' Javascript /Ajax
    Par RichardP dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/05/2007, 14h27
  3. [AJAX] Temps d'apprentissage d'AJAX avec connaissances PHP/SQL
    Par ayvong dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/04/2007, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo