Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3553 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [AJAX] Problème pour affichage de l'heure

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[AJAX] Problème pour affichage de l'heure

n°1635504
nero27
Posté le 02-11-2007 à 13:42:37  profilanswer
 

Bonjour à tous,

 

Je débute en AJAX (c'est mon premier script) et j'ai un souci pour afficher l'heure sur mon site.

 

Voici mes scripts :

 

browser.js qui permet de détecter le navigateur et de faire des requêtes AJAX en fonction de celui-ci.

Code :
  1. function Browser() {
  2. if (navigator.userAgent.indexOf('Opera')!=-1)
  3.  this.opera=true;
  4. if (navigator.userAgent.indexOf('Konqueror')!=-1)
  5.  this.konqueror=true;
  6. if (navigator.userAgent.indexOf('Safari')!=-1)
  7.  this.safari=true;
  8. if (navigator.userAgent.indexOf('Firefox/1.0')!=-1)
  9.  this.ff10=true;
  10. if (navigator.userAgent.indexOf('Firefox/1.5')!=-1)
  11.  this.ff15=true;
  12. if (navigator.userAgent.indexOf('Firefox/2.0')!=-1)
  13.  this.ff20=true;
  14. if (navigator.userAgent.indexOf('Netscape/7.0')!=-1)
  15.  this.netscape=true;
  16. if (navigator.userAgent.indexOf('MSIE 7')!=-1)
  17.  this.ie7=true;
  18. if (navigator.userAgent.indexOf('MSIE 6')!=-1)
  19.  this.ie6=true;
  20. if (this.opera)
  21.  this.navigateur="Opera";
  22. if (this.konqueror)
  23.  this.navigateur="Konqueror";
  24. if (this.safari)
  25.  this.navigateur="Safari";
  26. if (this.ff10 || this.ff15 || this.ff20)
  27.  this.navigateur="Firefox";
  28. if (this.ie7 || this.ie6)
  29.  this.navigateur="Internet Explorer";
  30. if (!this.navigateur)
  31.  this.navigateur="Inconnu";
  32. this.getHttpObject = function () {
  33.  if (this.navigateur=="Internet Explorer" )
  34.   return new ActiveXObject('Microsoft.XMLHTTP');
  35.  else
  36.   return new XMLHttpRequest();
  37. }
  38. }
  39. var browser=new Browser();
 

Le script lui-même :

Code :
  1. <script type="text/javascript">
  2. function majHorloge ()
  3. {
  4. var requete=browser.getHttpObject();
  5. requete.open('GET','heure.php',true);
  6. requete.onreadystatechange = function () {
  7.  afficheHorloge(requete);
  8. }
  9. requete.send(null);
  10. }
  11. function afficheHorloge(requete)
  12. {
  13. if (requete.readyState == 4)
  14. {
  15.  if (requete.status == 200)
  16.  {
  17.   $('heure').innerHTML = "Il est <b>"+requete.responseText+"</b>";
  18.   majHorloge();
  19.  }
  20. }
  21. }
  22. majHorloge();
  23. function $(id)
  24. {
  25. return document.getElementById(id);
  26. }
  27. //-->
  28. </script>
  29. <div id="heure"></div>
 

Et enfin, le fichier heure.php

Code :
  1. <?php
  2. $heure=date("H:i:s" );
  3. while ($heure=date("H:i:s" )) {
  4.  sleep(1);
  5. }
  6. echo date("H:i:s" );
  7. ?>
 

Au final, le div reste vide et j'ai une erreur d'affichée dans la console :
http://img232.imageshack.us/img232/7175/erreurajaxmc8.jpg

 

Savez-vous d'où le problème peut venir ?

 

Merci d'avance :jap:


Message édité par nero27 le 02-11-2007 à 14:03:17
mood
Publicité
Posté le 02-11-2007 à 13:42:37  profilanswer
 

n°1635555
kao98
...
Posté le 02-11-2007 à 14:53:36  profilanswer
 

Aïe! Ca pique les yeux tout ça !
 
Bon, commençons avec ça :
tu sais que ton script php, là, il tourne en boucle sans jamais renvoyer de résultat ! Jolie boucle infinie ceci-dit :D
 
Un conseil (le prend pas mal hein ! C'est pour t'aider) : revoit donc tes bases avant de vouloir faire de l'ajax !

Message cité 1 fois
Message édité par kao98 le 02-11-2007 à 14:54:23

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1635558
nero27
Posté le 02-11-2007 à 14:57:09  profilanswer
 

kao98 a écrit :

Aïe! Ca pique les yeux tout ça !
 
Bon, commençons avec ça :
tu sais que ton script php, là, il tourne en boucle sans jamais renvoyer de résultat ! Jolie boucle infinie ceci-dit :D
 
Un conseil (le prend pas mal hein ! C'est pour t'aider) : revoit donc tes bases avant de vouloir faire de l'ajax !


Arf, en effet, j'avais pas vu cette erreur de débutant :pfff:
 
En fait, je ne pensais pas que l'erreur venait du PHP, donc je n'avais pas regardé de ce côté-là.
 
Maintenant, ça fonctionne sous FF et IE6, mais pas sous IE7 : est-ce normal ?

n°1635560
kao98
...
Posté le 02-11-2007 à 14:59:22  profilanswer
 

Si j'ai bien compris, tu veux afficher l'heure en temps réelle en la demandant à chaque fois au serveur ?
 
Heu, c'est un truc à ne pas faire ça ! Ca va tuer les perfs du serveur, la bande passante, ... Pis même, d'où t'es donc venue cette idée ?


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1635562
nero27
Posté le 02-11-2007 à 15:04:15  profilanswer
 

kao98 a écrit :

Si j'ai bien compris, tu veux afficher l'heure en temps réelle en la demandant à chaque fois au serveur ?

 

Heu, c'est un truc à ne pas faire ça ! Ca va tuer les perfs du serveur, la bande passante, ... Pis même, d'où t'es donc venue cette idée ?


Mon sites est un élevage virtuel sur lequel se déroulent des enchères : je voudrais que l'heure affichée soit toujours identique à celle du serveur pour que les membres puissent enchérir facilement. Pour ce qui est de la bande passante et des perfs du serveur, je ne pense pas qu'un simple "echo" puisse vraiment les plomber, non ?

 

PS: le serveur est un opteron 180 avec 1Go de RAM.


Message édité par nero27 le 02-11-2007 à 15:04:36
n°1635565
kao98
...
Posté le 02-11-2007 à 15:09:42  profilanswer
 

C'est pas ce que doit renvoyer le serveur qui va être lourd, c'est simplement le nombre de requête HTTP à gérer !


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1635570
nero27
Posté le 02-11-2007 à 15:12:35  profilanswer
 

kao98 a écrit :

C'est pas ce que doit renvoyer le serveur qui va être lourd, c'est simplement le nombre de requête HTTP à gérer !


Erf, en effet, surtout multiplié par le nombre de connectés, ça peut faire mal :/

n°1635580
kao98
...
Posté le 02-11-2007 à 15:36:05  profilanswer
 

Exactement ! :)


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
n°1635586
astryad
Posté le 02-11-2007 à 15:46:02  profilanswer
 

Si tu veux diminuer la charge du serveur et garder une synchro correcte, tu peux faire comme ca :
 
Dans le code javascript, dans la fonction majHorloge, tu mets un timer d'une seconde qui relance la fonction (avec setTimeout ou quelquechose comme ca, je l'ai plus en tete). Comme ca, ta fonction ne se lance "que" toutes les secondes.
 
Ensuite, dans ta fonction tu rajoutes un compteur, qui s'incrémente à chaque exécution de la fonction. suivant la valeur du compteur, tu fais ca :
 
Si compteur < 60 : tu rajoutes 1 seconde à l'heure sans faire de requete au serveur
Si compteur = 60 : tu fais une requete au serveur, tu mets a jour avec l'heure du serveur, et tu remets le compteur à zéro.
 
Comme ca tu limites les requêtes, et tu restes à peu près synchronisé :)
 
PS : j'ai pas mis de code, mais l'idée y est :P Il y a peut être un ou deux ajustements à faire, mais en gros t'as les grandes lignes du fonctionnement.

n°1635600
nero27
Posté le 02-11-2007 à 16:01:58  profilanswer
 

astryad a écrit :

Si tu veux diminuer la charge du serveur et garder une synchro correcte, tu peux faire comme ca :
 
Dans le code javascript, dans la fonction majHorloge, tu mets un timer d'une seconde qui relance la fonction (avec setTimeout ou quelquechose comme ca, je l'ai plus en tete). Comme ca, ta fonction ne se lance "que" toutes les secondes.
 
Ensuite, dans ta fonction tu rajoutes un compteur, qui s'incrémente à chaque exécution de la fonction. suivant la valeur du compteur, tu fais ca :
 
Si compteur < 60 : tu rajoutes 1 seconde à l'heure sans faire de requete au serveur
Si compteur = 60 : tu fais une requete au serveur, tu mets a jour avec l'heure du serveur, et tu remets le compteur à zéro.
 
Comme ca tu limites les requêtes, et tu restes à peu près synchronisé :)
 
PS : j'ai pas mis de code, mais l'idée y est :P Il y a peut être un ou deux ajustements à faire, mais en gros t'as les grandes lignes du fonctionnement.


Pour ce qui de lancer une requête que toutes les secondes, c'est déjà le cas avec mon sleep(1) dans le code PHP ;)
 
Par contre, mélanger l'incrémentation et la MAJ AJAX, ça peut être une bonne idée [:paysan]

mood
Publicité
Posté le 02-11-2007 à 16:01:58  profilanswer
 

n°1635623
astryad
Posté le 02-11-2007 à 16:41:08  profilanswer
 

La différence entre le sleep(1) et le timeout en javascript, c'est que dans un cas, c'est ton serveur qui bouffe une seconde à attendre, et dans l'autre c'est le client qui attend une seconde avant de lancer la requête :)
 
Je pense qu'il est préférable de faire patienter le client plutôt que ton serveur fasse des sleep à longueur de temps (surtout qu'il est possible que le sleep consomme du temps processeur).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [AJAX] Problème pour affichage de l'heure

 

Sujets relatifs
problème dans un bloc PL/SQL[RESOLU]Probleme avec session_destroy
Ajax - Image SurvoléeProbleme legal copie SQL (Haut importance)
probleme infobulle javascriptProbleme de compilation
probleme avec script php et HTML[PROLOG] Petit problème simple de prédicat
[VB.NET]Problème traduction C#/VB.NETProbleme de methode
Plus de sujets relatifs à : [AJAX] Problème pour affichage de l'heure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR