J'ai trouvé la solution suivante. Vous pouvez échapper à la redirection après le traitement POST
en manipulant les history
objet.
Vous avez donc le formulaire HTML :
<form method=POST action='/process.php'>
<input type=submit value=OK>
</form>
Lorsque vous traitez ce formulaire sur votre serveur, au lieu de rediriger l'utilisateur vers /the/result/page
en mettant en place le Location
l'en-tête comme celui-ci :
$cat process.php
<?php
process POST data here
...
header('Location: /the/result/page');
exit();
?>
![enter image description here]()
Après traitement POST
ées que vous rendez petites <script>
et le résultat /the/result/page
<?php
process POST data here
render the <script> // see below
render `/the/result/page` // OK
?>
Les <script>
vous devez rendre :
<script>
window.onload = function() {
history.replaceState("", "", "/the/result/page");
}
</script>
Le résultat est le suivant :
![enter image description here]()
comme vous pouvez le voir, les données du formulaire sont POST
ée à process.php
script.
Ce script processus POST
données éditées et rendu /the/result/page
en une seule fois avec :
- pas de redirection
- pas de re
POST
données lorsque vous rafraîchissez la page (F5)
- pas de re
POST
lorsque vous naviguez vers la page précédente/suivante à travers l'historique du navigateur
UPD
Comme autre solution, je demande demande de fonctionnalité les Mozilla FireFox pour permettre aux utilisateurs de mettre en place des NextPage
qui fonctionnera comme suit Location
et de faire de la post/redirect/get
modèle obsolète.
En bref. Lorsque le formulaire de procédure du serveur POST
avec succès :
- Mise en place
NextPage
au lieu de Location
- Rendre le résultat du traitement
POST
comme il le ferait pour les données du formulaire GET
demande en post/redirect/get
modèle
Le navigateur voit à son tour le NextPage
l'en-tête :
- Ajuster
window.location
avec NextPage
valeur
- Lorsque l'utilisateur actualise la page, le navigateur négocie
GET
demande à NextPage
au lieu de re POST
données du formulaire
Je pense que cette mesure serait excellente si elle était mise en œuvre. =)