Rechercher : dans
Par :

Rafraichissement Javascript

Dernière réponse le 13 nov 2008 à 15:08:11 xSmokingbenx, le 6 mai 2008 à 11:46:29 
 Signaler ce message aux modérateurs

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)

Configuration: Doit être fonctionel sur IE & FF

Meilleures réponses pour « Rafraichissement Javascript » dans :
Javascript - Les événements Voir Qu'appelle-t-on un événement? Les événements sont des actions de l'utilisateur, qui vont pouvoir donner lieu à une interactivité. L'événement par excellence est le clic de souris, car c'est le seul que le HTML gère. Grâce au Javascript il est...
Javascript - Librairies d'effets pour vos images VoirAu gré de vos explorations du web, vous avez vu de superbes effets de présentation des images. Et ça vous plairaît bien de pouvoir proposer les mêmes à vos visiteurs. Voici quelques solutions en Javascript couplées à des CSS. Elles sont plus...
Javascript - Manipulation des contrôles clavier VoirManipulation des contrôles clavier Cette astuce a pour but de vous faire découvrir la (ou du moins une) manière de contrôler les évènements clavier en javascript. Cela vous permettra de contrôler/attribuer les/des comportements particuliers à...
Javascript - Coloration syntaxique dans vos pages web VoirSi vous avez un site web contenant des exemples de code (php, javascript, C#, Delphi, Python...), il peut être intéressant d'avoir une coloration syntaxique. C'est parfois pénible à réaliser, mais il existe une librairie Javascript qui permet de...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...
Javascript - Les tableaux VoirIntroduction à la notion de tableau Les variables de Javascript ne permettent de stocker qu'une seule donnée à la fois. Or, étant donné qu'il est souvent utile de manipuler de nombreuses données, le concept de variable se révéle parfois...
Javascript - l'objet Array VoirLes particularités de l'objet Array L'objet Array est un objet du noyau Javascript permettant de créer et de manipuler des tableaux. Voici la syntaxe à utiliser pour créer une variable tableau : var x = new Array(element1[, element2, ...]); Si...

1

JR, le 6 mai 2008 à 11:53:21

Et si tu mets ton setTimeout("request('afficher.php','xmlhttp')", 5000); à la fin de la fonction request ?

Répondre à JR

2

xSmokingbenx, le 6 mai 2008 à 12:50:08

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;

}

Répondre à xSmokingbenx

3

JR des cavernes, le 6 mai 2008 à 14:10:56

Je vois pas trop comment faire....T'as regardé la console d'erreur pour voir s'il n'y a pas un pb?

Répondre à JR des cavernes

4

JR des cavernes, le 6 mai 2008 à 14:19:45

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.

Répondre à JR des cavernes

5

xSmokingbenx, le 6 mai 2008 à 15:10:34

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 :)

Répondre à xSmokingbenx

6

xSmokingbenx, le 6 mai 2008 à 15:36:51

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

Répondre à xSmokingbenx

7

JR des cavernes, le 6 mai 2008 à 15:55:51

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...

Répondre à JR des cavernes

8

xSmokingbenx, le 6 mai 2008 à 16:05:40

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

Répondre à xSmokingbenx

9

 PhilPhP, le 13 nov 2008 à 15:08:11

C'est la fonction setInterval qui devrait faire l'affaire ;-)

Phil

Répondre à PhilPhP