Rafraichissement Javascript

Résolu/Fermé
xSmokingbenx - 6 mai 2008 à 11:46
 PhilPhP - 13 nov. 2008 à 15:08
Bonjour,

Voici mon problème. J'ai une fonction Ajax exécutant un certain code.
Pour tester le fonctionnement de celle ci, je l'apelle via un lien qui l'exécute. Car marche.

Mais ce qu'il me faudrait, c'est que cette fonction s'éxécute automatiquement toutes les 5 secondes, avec éventuellement un arrêt au bon de X minutes sans activités sur la page.

J'ai essayé ainsi:
<td id="xmlhttp">
<script language="javascript">
setTimeout("request('afficher.php','xmlhttp')", 5000);
</script>
</td>
request('url','contenu') étant ici ma fonction ajax (qui marche)

Résultat: La fonction Ajax request() s'exécute correctement, mais 5 secondes après le chargement de la page, et une seule fois.

Comment la faire s'exécuter au chargement de la page, et ensuite automatiquement toutes les 5 secondes ?
Et éventuellement (cela ne m'est pas indispensable, çà serait un plus ) arrêter ce rafraichissement automatique au bout de X minutes sans activités sur la page ?


Précisions: Mon projet est un forum/chat que le demandeur inclura dans son site pour remplacer son système actuel.
Mon fichier forum.php contenant la fonction Ajax affichant les messages, ainsi que le formulaire pour en écrire étant inclu dans une page index.php fixe avec juste le contenu qui change en fonction de la page sélectionné, donc un <body onload="maFonction()"> n'est surement pas possible)

5 réponses

et si tu mets ton setTimeout("request('afficher.php','xmlhttp')", 5000); à la fin de la fonction request ?
0
xSmokingbenx
6 mai 2008 à 12:50
Il ne se passe rien, je ne la met peut être pas au bon endroit. Mais en faisant çà il faut quand même que je mette un lien pour appeler une première fois la fonction ?
Je met ma fonction ajax pour mieux illustrer:

function request(url,cadre) {
var XHR = null;

if(window.XMLHttpRequest)
XHR = new XMLHttpRequest();
else if(window.ActiveXObject)
XHR = new ActiveXObject("Microsoft.XMLHTTP");
else {
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}

XHR.open("GET",url, true);


XHR.onreadystatechange = function attente() {


if(XHR.readyState == 4) {


document.getElementById(cadre).innerHTML = XHR.responseText;
}
}

XHR.send(null);
return;

}
0
JR des cavernes Messages postés 152 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 19 mai 2009 84
6 mai 2008 à 14:10
Je vois pas trop comment faire....T'as regardé la console d'erreur pour voir s'il n'y a pas un pb?
0
JR des cavernes Messages postés 152 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 19 mai 2009 84
6 mai 2008 à 14:19
Ah si voilà une idée :

Tu crée une fonction que t'appelle comme tu veux : par exemple appeler :

function appeler()
{
request('afficher.php','xmlhttp');
setTimeout("appeler()", 5000);
}

et dans ton code à la place d'appeler la fonction request tu appelle appeler qui appellera request toutes les 5 sec si je ne me trompes pas.
0
xSmokingbenx
6 mai 2008 à 15:10
Merci pour tes conseils, j'ai bricolé donc ainsi:

function appeler()
{
request('afficher.php','xmlhttp');
setTimeout("appeler()", 5000);
} 


Et pour appeler la fonction:

<td id="xmlhttp" onload="appeler()">
			<script language="javascript">
				appeler();
			</script>
		</td>


Et çà marche :) merci :)
0
xSmokingbenx
6 mai 2008 à 15:36
je viens de tester avec Internet Explorer, et çà ne marche pas :'(

IE se contente de lancer l'ajax une seule fois au chargement de la page
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
JR des cavernes Messages postés 152 Date d'inscription mardi 6 mai 2008 Statut Membre Dernière intervention 19 mai 2009 84
6 mai 2008 à 15:55
Je ne comprends pas très bien comment tu appelle la fonction. onload='appeler()' devrait suffir...Je ne vois pas l'utilité des balises <script> à cet endroit...
0
xSmokingbenx
6 mai 2008 à 16:05
Alors en fait le onload c'ets que j'ai oublié de le retirer. Car avec çà ne marche pas du tout .
avec l'appel dans le script çà marche, mais je viens de me rendre compte qu'avec IE çà ne marche pas non plus .

Et je viens de voir aussi que çà ne marche que sur mon serveur local. Sur mon serveur web çà ne marche pas du tout même avec Firefox
0
PhilPhP > xSmokingbenx
13 nov. 2008 à 15:08
C'est la fonction setInterval qui devrait faire l'affaire ;-)

Phil
0