Aller au contenu

rafraîchissement automatique de la page et remplissage de formulaires


Sujets conseillés

Posté

Bonjour,

Sur la même page se trouve un formulaire permettant au visiteur de formuler une question, et au-dessous sont affichées les questions posées par les visiteurs et les réponses qu'on leur apporte.

Lorsque le visiteur a posé sa question, il laisse la page de son navigateur ouverte en attendant de voir s'afficher sa réponse. Mais il peut attendre longtemps, car si la page n'est pas rafraîchie, il ne voit pas la réponse qui lui a été donnée depuis longtemps.

J'ai ajouté donc au code de la page :

header ('refresh: 60; url = http://www.mapage.fr') ; 

Tout va bien tant que le visiteur n'écrit pas sa question ou sa réponse dans le formulaire au moment où le rafraîchissement a lieu ! Sinon il perd tout ce qu'il a entré !

De quelle(s) manière(s) on pourrait parer à cet inconvénient ? J'ai pensé à faire 2 frames : une pour le formulaire et une pour l'affichage des question-réponses, ne rafraîchissant que cette dernière. Est-ce une bonne idée, car je sais que les frames sont très critiquées (Je ne sais pas trop pourquoi d'ailleurs !).

Je vous remercie de vos idées.

Posté

Les frames sont critiquées parce qu'elles créent autant de pages qui peuvent être appelées "hors de leur contexte": on peut tomber sur juste la frame de formulaire, ou celle de réponses. De plus, le contenu d'une frame n'est pas référencé dans la page principale.

Si tu en as les compétences, tu peux rafraîchir la zone ciblée en AJAX.

Posté

Je vous remercie.

En utilisant Ajax, j'imagine que j'afficherai les questions et réponses dans un conteneur <DIV>. Peut-on ne rafraîchir qu'un conteneur <DIV> d'une page ?

Posté (modifié)

Voici ce que j'ai fait :


<html>
<head>
<script language="javascript">
function marequete(url,cadre) {
var XHR = null;

if(window.XMLHttpRequest) // Firefox
XHR = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
XHR = new ActiveXObject("Microsoft.XMLHTTP");
else {
alert("Votre navigateur ne supporte pas ce script...");
return;
}

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

XHR.onreadystatechange = function attente() {

if(XHR.readyState == 4) {

document.getElementById(cadre).innerHTML = XHR.responseText;
}
}
XHR.send(null);
return;
}
</script>
</head>

<body>
<span onclick="marequete('afficher.php', 'affichage');">Rafraîchir</span>
<div id="affichage"></div>
</body>
</html>

Ce code fonctionne bien, mais l'utilisateur doit cliquer pour actualiser. Ca n'a pas d'intérêt car ça ne répond pas à ce que je souhaiterais : un rafraîchissement automatique toutes les tant secondes.

Modifié par dimi3
Posté

J'y suis arrivé ainsi :


function go()
{
marequete('afficher.php','affichage');
actu = window.setTimeout(go,60000);
}
</script>
</head>

<body onload="go();">

Merci, captain_torche, de m'avoir aiguillé sur Ajax, dont je ne connais pas tous les trésors.

Posté

Merci encore pour votre attention et votre temps. jQuery fera l'objet de ma prochaine étude... le temps de trouver un bon bouquin !

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...