Frage

Ich möchte eine Seite neu zu laden mit:

window.location.reload(true); 

Aber ich erhalte die Postdata Warnung, weil die Refresh-Funktion will vorherige POST Formulardaten erneut zu senden. Wie kann ich aktualisiere meine Seite ohne diese Warnung?

AKTUALISIERT: Ich habe keine Kontrolle über das Projekt! Ich kann nicht umgehen die POST selbst!

War es hilfreich?

Lösung

Just Ändern window.location in JavaScript ist gefährlich , da der Benutzer immer noch könnte traf die Zurück-Taste und wiederholen Sie den Pfosten, die zu unerwarteten Ergebnissen führen (wie ein duplizieren Kauf ). PRG ist eine viel bessere Lösung

Verwenden Sie den Beitrag / Redirect / Get (PRG) Muster

  

Um dieses Problem zu vermeiden, viele Web-Anwendungen, die die PRG-Muster verwenden - stattdessen eine HTML-Seite direkt zurückzukehren, kehrt die POST-Operation einen Umleitungsbefehl (den HTTP-303-Antwort-Code unter Verwendung von (manchmal 302) zusammen mit der HTTP „Location“ Antwort Header), Anweisen der Browser eine andere Seite über eine HTTP-GET-Anforderung zu laden. Die Ergebnisseite kann dann sicher ohne unerwartete Nebenwirkungen vorgemerkt oder neu geladen werden.

Andere Tipps

Sie können nicht aktualisiert werden, ohne die Warnung; refresh weist den Browser die letzte Aktion zu wiederholen. Es liegt an den Browser zu wählen, ob der Benutzer zu warnen, wenn die letzte Aktion zu wiederholen werden Daten erneut senden.

Sie können auf die gleiche Seite mit einer neuen Sitzung erneut navigieren, indem Sie:

window.location = window.location.href;

hatte ich einige Probleme mit Anker / Hash-Urls (einschließlich #) nicht mit der Lösung von Rex Nachladen ...

So landete ich schließlich nach oben durch den Hash-Teil zu entfernen:

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

So umgeht POST Warnung Sie Seite mit vollständiger URL nachladen muss. Funktioniert.

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

, wie etwa window.location.replace (window.location.href);

Sie können JavaScript verwenden:

window.location.assign(document.URL);

Für mich arbeiten auf Firefox und Chrome

lesen Sie in diesem Link: http: //www.codeproject. com / Tipps / 433.399 / PRG-Pattern-Post-Redirect-Get

Das funktioniert

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

Der Grund, es nicht ohne die

return false;
funktionierte ist, dass zuvor behandelt, dass als eine Form Submit-Button. Mit einer expliziten return false darauf, tut es nicht die Form einreichen und macht genau das Neuladen der gleichen Seite, die das Ergebnis einer früheren Post auf dieser Seite war.

Wenn Sie auf der Bühne sind, wo Sie mit den Post-Daten fertig sind und wollen einfach wieder aufs Neue um die Seite anzuzeigen, können Sie nur eine window.location verwenden und vielleicht sogar eine zufällige Zeichenfolge anhängen als eine Abfrage Parameter um eine neue zu garantieren Version der Seite.

Nikl-Version nicht Abfrageparameter nicht passieren, ich verwenden, um die folgende modifizierte Version:

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

oder in meinem Fall musste ich die obersten Seite \ Rahmen aktualisieren, so habe ich die folgende Version

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" - löst das Problem

.

if method="post" dann nur Warnung kommt.

Ich habe eine Funktion geschrieben, der die Seite ohne nachträgliche Vorlage nachladen und es wird mit Hashes arbeiten.

Ich tue dies durch das Hinzufügen / GET-Parameter in der URL aufgerufen reload Modifizierung durch seinen Wert mit dem aktuellen Zeitstempel in ms aktualisiert wird.

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;
};

Beachten Sie, wenn Sie diese Funktion in einem href-Attribut auslösen wollen, setzen sie auf diese Weise. href="javascript:reload();void 0;", damit es funktioniert, erfolgreich

Der Nachteil meiner Lösung ist es die URL zu ändern, so dass diese „reload“ ist kein echtes Reload, statt es ist eine Last mit einer anderen Abfrage. Dennoch könnte es Ihren Bedürfnissen passen, wie es für mich.

Sie sind nicht zu verwenden Javascript gezwungen alles, was zu tun ist. Viele Probleme haben einfache Lösungen wie diesen. Sie können diesen heikelen Anker verwenden:

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

natürlich weiß, dass ich Ihnen eine automatische Lösung benötigen aber in vielen Fällen helfen.

Glück

mit Meta-Refresh in html

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

mit Meta-Refresh in PHP

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

Hier ist eine Lösung, die immer funktionieren sollte, und entfernen Sie nicht den Hash.

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;

Wenn Sie GET Methode anstelle von POST verwenden, dann können wir nicht die Form Werte abgelegt. Wenn Sie window.opener.location.href = window.opener.location.href; verwenden, dann können wir die db Feuer und wir können den Wert bekommen, aber nur Sache ist die JSP nicht erfrischend eventhough die scriplet die Formularwerte aufweisen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top