Rebol CGI-HTML rafraichir page
sebastien17-Dec-2013/11:35:20+1:00
Bonjour à tous,
Comme suite à une demande de mon entreprise, je suis actuellement en cours de développement d’un site internet dans certaines pages effectuer des scripts et calculs.
J’ai choisi Rebol 2 qui répond à tous mes besoins et même plus.
Par contre, j’ai un petit problème sur certaines pages les calculs demandent un certain temps et j’aimerai afficher une barre de progression dans la page.
J’ai essayé la code suivant

#!"c:/wamp/bin/apache/apache2.4.2/cgi-bin/rebol_view.exe" -csi
Rebol []
barre_prog: {
         <progress id="progressBar" value="avt" max="100"></progress>
         <span id="percent"></span>
         <script>
            eltBar = document.getElementById("progressBar");
            eltPct = document.getElementById("percent");
            eltPct.innerHTML = eltBar.position * 100 + "%";
         </script>
         <h2>suivi</h2>
         }
Calcul: func [][
      for i 1 1000 2 [
avt: 100 / 1000 * i
suivi: join “calcul : “ i
barre_prog_aff: copy barre_prog               barre_prog_aff: replace barre_prog_aff "avt" avt
barre_prog_aff: replace barre_prog_aff "suivi" suivi
print barre_prog_aff ]
      ]

print "content-type: text/html^/"   
Calcul

Le calcul s’effectue bien, mais malheureusement la page n’est pas rafraîchie et je me retrouve avec la barre de progression affichée 1000 fois dans la page
Avez-vous une idée
Merci par avance
DideC17-Dec-2013/16:23:50+1:00
Bonjour Sebastien,

Je pense que ça ne va pas être aussi simple !!

En développement Web (et c'est pour ça que je n'aime pas trop ça, personnellement), il faut bien avoir à l'esprit qu'une partie est interprété par le serveur (ton présent CGI) et qu'une autre l'est par le navigateur (le "texte" HTML que produit ton script CGI et le code javascript qu'il contient éventuellement) et tout ça de manière asynchrone bien sûre !

Malheureusement, ce que tu demande est (je crois) assez compliqué à faire :
- Produire la page Web avec le progress bar et du javascript qui va refaire appel périodiquement au serveur (timer) pour connaitre le niveau de progression du calcul (via xmlhttprequest : http://www.toutjavascript.com/savoir/xmlhttprequest.php3 )
- Ton CGI, doit donc, terminer la génération de la page Web, puis lancer le calcul sans plus produire aucun code HTML, mais en enregistrant (disque ou BDD) régulièrement la progression du calcul (10%, 20%...) et au final, les résultats.
- C'est un autre CGI, appelé via le XMLHttpRequest qui va lire l'état en cours (disque ou BDD) et le renvoyer à la page web, ou les résultats si c'est fini.
- La page web avec le progress bar va donc exécuter périodiquement du javascript qui lira l'état en cours. Si le calcul est terminé (100%), au choix : 1) c'est la page qui modifie son contenu (toujours via javascript), ou 2) tu fais une redirection sur un autre CGI qui lui affiche les résultats (lu sur le disque ou la BDD).

Maintenant il peut y avoir des détails qui compliquent le tout, genre si le calcul est à refaire pour chaque visiteur, auquel cas il faut stocker la progression ou le résultat pour la session qu'il faut alors identifier de manière unique. En plus il faut gérer la persistance de ces données (combien de temps elles sont valides avant de recalculer).

Comme disait Persephone "Have fun !"

Login required to Post.


Powered by RebelBB and REBOL 2.7.8.4.2