dimi3 Posté 18 Février 2011 Posté 18 Février 2011 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.
captain_torche Posté 18 Février 2011 Posté 18 Février 2011 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.
dimi3 Posté 18 Février 2011 Auteur Posté 18 Février 2011 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 ?
captain_torche Posté 18 Février 2011 Posté 18 Février 2011 Oui, bien sûr ! C'est là tout l'avantage d'AJAX !
dimi3 Posté 18 Février 2011 Auteur Posté 18 Février 2011 (modifié) Voici ce que j'ai fait : <html><head><script language="javascript">function marequete(url,cadre) {var XHR = null;if(window.XMLHttpRequest) // FirefoxXHR = new XMLHttpRequest();else if(window.ActiveXObject) // Internet ExplorerXHR = 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é 19 Février 2011 par dimi3
dimi3 Posté 18 Février 2011 Auteur Posté 18 Février 2011 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.
captain_torche Posté 18 Février 2011 Posté 18 Février 2011 Pour te simplifier la vie, tu peux aussi utiliser des librairies JavaScript, comme jQuery, Mootools ou Prototype (Ma préférence allant à jQuery, très répandu, bien que j'avoue ne pas avoir testé Mootools), qui simplifient (entre autres) les appels AJAX.
dimi3 Posté 18 Février 2011 Auteur Posté 18 Février 2011 Merci encore pour votre attention et votre temps. jQuery fera l'objet de ma prochaine étude... le temps de trouver un bon bouquin !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant