div qui se recharge toutes les x seconde(s)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : div qui se recharge toutes les x seconde(s)

par chrislabricole » 11 août 2007, 18:42

^^ lol
il va pas tardé :o :wink: :D

par zeus » 10 août 2007, 14:08

/* Merci à PHPfrance pour m'avoir aidé autant à établir ce script et plus particulièrement à un membre qui devrait devenir modo :P */
Il faudrait surtout qu'il devienne ViPHP avant ... ;)

par Sékiltoyai » 10 août 2007, 13:30

Bon, maintenant, c'est parti pour les conseils :)

Tout d'abord, sors le maximum de ta fonction, notamment :

Code : Tout sélectionner

var xhttpRequest=null; if (window.XMLHttpRequest) { xhttpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { xhttpRequest = new ActiveXObject('Microsoft.XMLHTTP'); }
c'est inutile de reconstruire l'objet xhr à chaque fois, tu peux le construire une fois pour toute.

Code : Tout sélectionner

xhttpRequest.onreadystatechange = function() { if(xhttpRequest.readyState==4) { // C'est ici que tu dois récupérer le résultat de la requète. var title = xhttpRequest.responseText document.getElementById('title').innerHTML = title; setInterval('reloadtitle()',1000); // la fonction va s'actualiser toute les secondes.... } };
Pareil, tu peux ne définir cette fonction qu'une seule fois hors de ta fonction reloadtitle().


Autre chose, ici, ta variable title ne sert à rien :

Code : Tout sélectionner

var title = xhttpRequest.responseText document.getElementById('title').innerHTML = title;
Tu peux faire l'assignation directe :

Code : Tout sélectionner

document.getElementById('title').innerHTML = xhttpRequest.responseText;
Sinon, tu utilises mal setInterval(). Cette fonction ne doit être utilisée qu'une seule fois. Tel que tu l'utilises, à chaque fois que tu l'appelles, tu écrases le précédent appel à la fonction (le résultat est le même mais c'est on ne peut plus sale). Ce que tu peux faire, c'est la mettre dans ton onLoad :

Code : Tout sélectionner

<body onLoad="reloadtitle();setInterval('reloadtitle', 1000);">
De cette manière, tu ne l'utilises qu'une fois, et tu t'assures que tu ne chargeras pas le titre avant que la page ne soit chargée (sans quoi tu pourrais avoir des erreurs).

Une fois que tu auras fait tout cela, ton code sera un peu plus propre.

/* Merci à PHPfrance pour m'avoir aidé autant à établir ce script et plus particulièrement à un membre qui devrait devenir modo :P */
Ce n'est pas à moi qu'il faut le dire, ça :D

par chrislabricole » 10 août 2007, 03:14

j'ai envi de flooder "SA MARCHE !!!!!!!!!!!!" mais comme PHPfrance on limité à 1 message d'affiler, je peut pas :cry: :lol:

MERCI !!!!!!!!!!!!!!!!!!

sa marche nickel !
Merci pour toutes tes indications, sa m'a permis d'apprendre quelques notions en javascript :P

Encore Merci :)

Voici le code Officiel :

Code : Tout sélectionner

entre <head> et </head> <script type="text/javascript"> /* Merci à PHPfrance pour m'avoir aidé autant à établir ce script et plus particulièrement à un membre qui devrait devenir modo :P */ function reloadtitle() { var xhttpRequest=null; if (window.XMLHttpRequest) { xhttpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { xhttpRequest = new ActiveXObject('Microsoft.XMLHTTP'); } //on définit l'appel de la fonction au retour serveur xhttpRequest.onreadystatechange = function() { if(xhttpRequest.readyState==4) { // C'est ici que tu dois récupérer le résultat de la requète. var title = xhttpRequest.responseText document.getElementById('title').innerHTML = title; setInterval('reloadtitle()',1000); // la fonction va s'actualiser toute les secondes.... } }; //on appelle le fichier currentsong.xsl xhttpRequest.open('GET','currentsong.xsl', true); xhttpRequest.send(null); } </script> rajouter onLoad="reloadtitle()" dans la balise <body> entre <body> et </body> <div id="title">Chargement du titre en cours...<noscript> Merci d'activé JavaScript sur votre navigateur !</noscript></div>
Voilà, merci, CE SUJET EST MAINTENANT UN GROS SUJET RéSOLU !

PS: j'ai mis un <noscript>, pour que le visiteur active javascript, sinon, il peut pas voir les titres....

EDIT : Oh ! chui devenu Eléphanteau :wink: :lol: :D

par Sékiltoyai » 10 août 2007, 02:23

Bah c'est avec la fonction setInterval. Je ne t'en dis pas plus parce que c'est vraiment simple à utiliser. Une recherche google t'en dira plus à ce sujet :)

par chrislabricole » 10 août 2007, 01:26

mouaih !!!!!
la titre s'affiche !

déjà, merci pour cette 1ère étape ^^


Plus d'info pour l'actualisation stp ^^

par Sékiltoyai » 10 août 2007, 00:11

La casse : xhttprequest et xhttpRequest, ce n'est pas la même chose.

par chrislabricole » 09 août 2007, 21:20

voila, je viens de remplacer tous les "xhr" par "xhttprequest"

voila l'erreur maintenant :
Erreur : xhttpRequest is not defined
Ligne : 25

la ligne 25 :

Code : Tout sélectionner

var title = xhttpRequest.responseText
je pensé qui fallais un ";" à la fin de la ligne, mais non, sa le fais toujours :roll:

donc voila le code ... :

Code : Tout sélectionner

<script type="text/javascript"> function reloadtitle() { var xhttprequest=null; if (window.XMLHttpRequest) { xhttprequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { xhttprequest = new ActiveXObject('Microsoft.XMLHTTP'); } //on définit l'appel de la fonction au retour serveur xhttprequest.onreadystatechange = function() { if(xhttprequest.readyState==4) { // C'est ici que tu dois récupérer le résultat de la requète. var title = xhttpRequest.responseText document.getElementById('title').innerHTML = title; } }; //on appelle le fichier currentsong.xsl xhttprequest.open('GET','currentsong.xsl', true); xhttprequest.send(null); } </script>

par Sékiltoyai » 09 août 2007, 20:59

Relis ton code, tu appelles ta variable xhr à l'initialisation, il ne peut pas reconnaître quand tu lui mets xhttprequest. Donne leur le même nom.

par chrislabricole » 09 août 2007, 20:29

oui, il y a 2 erreurs :
Image

et pour le onLoad, je l'avais déjà mis ;)


EDIT : 1ère erreur, le égal : corrigé, 2ème, je sais pas xD

EDIT 2: arf, maintenant, il me dit "xhttpRequest is not defined" est plus "reloadtitle is not defined" :roll:

par Sékiltoyai » 09 août 2007, 19:55

Pour les erreurs, je vois une erreur de syntaxe, tu peux diagnostiquer ca sous Firefox ou Opera avec un débogueur intégré (regarde dans les menus si tu n'as pas une console javascript), ou sous Internet Explorer en l'activant dans les options avancées).
Sinon, il faut bien sur que tu éxécutes ta fonction quelquepart pour que ca marche, par exemple, dans ta balise body :
<body onLoad="reloadtitle()">

par chrislabricole » 09 août 2007, 19:01

ok, donc sa donne cela :

Code : Tout sélectionner

<script type="text/javascript"> function reloadtitle() { var xhr=null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } //on définit l'appel de la fonction au retour serveur xhr.onreadystatechange = function() { if(xhr.readyState==4) { // C'est ici que tu dois récupérer le résultat de la requète. var title xhttpRequest.responseText document.getElementById('title').innerHTML = title; } }; //on appelle le fichier currentsong.xsl xhr.open('GET', 'currentsong.xsl', true); xhr.send(null); } </script>
Oui, j'ai tester, il n'y a pas de titre qui s'affiche, mais bizarrement, :
extrait de mon code de départ (code dans ouvert avec bloc-note):

Code : Tout sélectionner

<div id="title"></div>
et se que j'obtient avec le code exécuter :

Code : Tout sélectionner

<div id="title"/></td><td/></tr></table></div>
je ne sais pourquoi....
pourtant, mon fichier currentsong ne contient pas de table... mais le fichier dans le quel je veut mettre mon script oui...

EDIT : non c'est bon, erreur de ma part pour les tr et table dans le div....

par Sékiltoyai » 09 août 2007, 18:50

Ta fonction alert_ajax ne te sert à rien.
Sinon, tu as testé le script pour voir ?

par chrislabricole » 09 août 2007, 18:02

comme cela ?

Code : Tout sélectionner

<script type="text/javascript"> function reloadtitle() { var xhr=null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } //on définit l'appel de la fonction au retour serveur xhr.onreadystatechange = function() { if(xhr.readyState==4) { // C'est ici que tu dois récupérer le résultat de la requète. var title xhttpRequest.responseText document.getElementById('title').innerHTML = title; } }; //on appelle le fichier currentsong.xsl xhr.open('GET', 'currentsong.xsl', true); xhr.send(null); } function alert_ajax(xhr) { alert(xhr.responseText); } </script>
nan, j'ai du me planter quelque part :roll: #-o

par Sékiltoyai » 09 août 2007, 17:42

Non, ca ne peux pas marcher comme cela, il faut que tu assignes une fonction à onreadystatechange et que tu envoies la requète http avec send.
Comme ici : http://gael-donat.developpez.com/web/intro-ajax/#LII-B
Sauf que au lieu de faire :

Code : Tout sélectionner

xhr.onreadystatechange = function() { alert_ajax(xhr); };
Tu feras :

Code : Tout sélectionner

xhr.onreadystatechange = function() { if(xhr.readyState==4) { // C'est ici que tu dois récupérer le résultat de la requète. } };