Question

Je veux recharger une page en utilisant:

window.location.reload(true); 

Mais je reçois l'avertissement de POSTDATA parce que la fonction de rafraîchissement veulent les données précédentes de renverrons formulaire POST. Comment puis-je me rafraîchir la page sans cet avertissement?

MISE À JOUR: Je ne contrôle pas du projet! Je ne peux pas contourner le poste lui-même!

Était-ce utile?

La solution

Il suffit de changer window.location en JavaScript est dangereux parce que l'utilisateur pourrait encore appuyer sur le bouton retour et soumettre à nouveau le poste, ce qui pourrait avoir des résultats inattendus (par exemple un dupliquer achat ). PRG est une bien meilleure solution

Utilisez le modèle Post / Redirect / Get (PRG)

  

Pour éviter ce problème, de nombreuses applications Web utilisent le modèle PRG - au lieu de retourner une page HTML directement, l'opération POST retourne une commande de redirection (en utilisant le code de réponse HTTP 303 (parfois 302) ainsi que la réponse « Emplacement » HTTP en-tête), demandez au navigateur de charger une autre page à l'aide d'une requête HTTP GET. La page de résultat peut alors être en toute sécurité ou bookmarked rechargé sans effets secondaires inattendus.

Autres conseils

Vous ne pouvez pas actualiser sans l'avertissement; refresh indique au navigateur de répéter la dernière action. Il appartient au navigateur de choisir pour avertir l'utilisateur si répéter la dernière action implique resoumettre des données.

Vous pouvez re-naviguer vers la même page avec une nouvelle session en faisant:

window.location = window.location.href;

J'ai eu quelques problèmes avec l'ancre / hachage-urls (y compris #) pas Rechargement à l'aide de la solution de Rex ...

Alors j'ai finalement fini en enlevant la partie de hachage:

window.location = window.location.href.split("#")[0];

Pour contourner POST avertissement, vous devez recharger la page avec l'URL complète. Fonctionne très bien.

window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;

comment environ window.location.replace (window.location.href);

Vous pouvez utiliser JavaScript:

window.location.assign(document.URL);

A travaillé pour moi sur Firefox et Chrome

vérifier ce lien: http: //www.codeproject. com / Conseils / 433399 / PRG-directivité-post-Redirect-Get

Cela a fonctionné

<button onclick="window.location.href=window.location.href; return false;">Continue</button>

La raison pour laquelle il ne fonctionne pas sans

return false;

est que précédemment il traité que comme une forme bouton de soumission. Avec un faux retour explicite là-dessus, il ne fait pas la forme et soumettre fait exactement le rechargement de la même page qui a été le résultat d'un précédent à cette page.

Si vous êtes à l'étape où vous avez terminé avec les données de poste et que vous voulez simplement voir à nouveau la page à nouveau, vous pouvez simplement utiliser un window.location et même append peut-être une chaîne aléatoire comme paramater de requête pour garantir une nouvelle version de la page.

La version de Nikl ne passe pas obtenir les paramètres de la requête, je la version modifiée suivante:

window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname + window.location.search;

ou dans mon cas je avais besoin de rafraîchir la page cadre supérieure \, donc je la version suivante

window.top.location.href = window.top.location.protocol +'//'+ window.top.location.host + window.top.location.pathname + window.top.location.search;
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">

method="get" - résout le problème

.

if method="post" alors seulement avertissement est émis.

J'ai écrit une fonction qui rechargera la page sans soumission de poste et il travaillera avec hash, aussi.

Je le fais en ajoutant / la modification d'un paramètre GET dans l'URL appelée reload en mettant à jour sa valeur avec l'horodatage en cours en ms.

var reload = function () {
    var regex = new RegExp("([?;&])reload[^&;]*[;&]?");
    var query = window.location.href.split('#')[0].replace(regex, "$1").replace(/&$/, '');
    window.location.href =
        (window.location.href.indexOf('?') < 0 ? "?" : query + (query.slice(-1) != "?" ? "&" : ""))
        + "reload=" + new Date().getTime() + window.location.hash;
};

Gardez à l'esprit, si vous voulez déclencher cette fonction dans un attribut href, mettre en œuvre cette façon. href="javascript:reload();void 0;" pour le faire fonctionner, avec succès

L'inconvénient de ma solution est il va changer l'URL, donc ce « reload » est pas un vrai reload, c'est plutôt une charge avec une autre requête. Pourtant, il pourrait répondre à vos besoins comme il le fait pour moi.

vous n'êtes pas obligé d'utiliser le javascript pour faire tout. De nombreux problèmes ont des solutions faciles comme celui-ci. vous pouvez utiliser ce point d'ancrage délicat:

<a href=".">Continue</a>

Bien sûr, je sais que vous pourriez avoir besoin d'une solution automatique, mais cela aidera dans de nombreux cas.

bonne chance

en utilisant meta refresh en html

<meta http-equiv='refresh' content='1'>

en utilisant meta refresh en php

echo "<meta http-equiv='refresh' content='1'>"

Voici une solution qui devrait toujours fonctionner et ne supprime pas le hachage.

let currentPage = new URL(window.location.href);
currentPage.searchParams.set('r', (+new Date * Math.random()).toString(36).substring(0, 5));
window.location.href = currentPage.href;

Si vous utilisez la méthode de GET au lieu de POST nous ne pouvons pas la forme des valeurs déposées. Si vous utilisez window.opener.location.href = window.opener.location.href; alors nous pouvons tirer avec le db et nous pouvons obtenir la valeur mais seule chose est la JSP n'est pas rafraîchissant eventhough le scriplet ayant les valeurs du formulaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top