Ich möchte eine Seite neu laden mit:
window.location.reload(true);
Ich erhalte jedoch die POSTDATA-Warnung, da die Aktualisierungsfunktion frühere POST-Formulardaten erneut senden möchte. Wie kann ich meine Seite ohne diese Warnung aktualisieren?
AKTUALISIERT: Ich habe keine Kontrolle über das Projekt! Ich kann den POST selbst nicht umgehen!
javascript
refresh
reload
postdata
Ricibald
quelle
quelle
Antworten:
Nur das Ändern
window.location
von JavaScript ist gefährlich, da der Benutzer immer noch auf die Schaltfläche "Zurück" klicken und den Beitrag erneut senden kann, was zu unerwarteten Ergebnissen führen kann (z. B. ein doppelter Kauf ). PRG ist eine viel bessere LösungVerwenden Sie das PRG-Muster (Post / Redirect / Get)
quelle
Sie können ohne die Warnung nicht aktualisieren. Aktualisieren weist den Browser an, die letzte Aktion zu wiederholen. Es ist Sache des Browsers, zu entscheiden, ob der Benutzer gewarnt werden soll, wenn das Wiederholen der letzten Aktion das erneute Senden von Daten umfasst.
Sie können mit einer neuen Sitzung erneut zu derselben Seite navigieren, indem Sie Folgendes tun:
window.location = window.location.href;
quelle
Ich hatte einige Probleme mit Anker- / Hash-URLs (einschließlich #), die nicht mit der Lösung von Rex neu geladen wurden ...
Also habe ich endlich den Hash-Teil entfernt:
window.location = window.location.href.split("#")[0];
quelle
Um die POST-Warnung zu umgehen, müssen Sie die Seite mit der vollständigen URL neu laden. Funktioniert gut.
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
quelle
Sie können JavaScript verwenden:
window.location.assign(document.URL);
Arbeitete für mich an Firefox und Chrome
Überprüfen Sie diesen Link: http://www.codeproject.com/Tips/433399/PRG-Pattern-Post-Redirect-Get
quelle
wie wäre es mit window.location.replace (window.location.href);
quelle
Das hat funktioniert
<button onclick="window.location.href=window.location.href; return false;">Continue</button>
Der Grund, warum es ohne das nicht funktioniert hat
ist, dass es zuvor als Formular-Senden-Schaltfläche behandelt wurde. Mit einer expliziten Rückgabe false wird das Formular nicht gesendet und nur die gleiche Seite neu geladen, die das Ergebnis eines vorherigen POST auf dieser Seite war.quelle
Wenn Sie sich in der Phase befinden, in der Sie mit den Post-Daten fertig sind und die Seite einfach erneut anzeigen möchten, können Sie einfach eine window.location verwenden und möglicherweise sogar eine zufällige Zeichenfolge als Abfrageparameter anhängen, um eine neue Version der zu garantieren Seite.
quelle
Nikls Version besteht keine Abfrageparameter, ich habe die folgende modifizierte Version verwendet:
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname + window.location.search;
oder in meinem Fall musste ich die oberste Seite \ frame aktualisieren, also habe ich die folgende Version verwendet
window.top.location.href = window.top.location.protocol +'//'+ window.top.location.host + window.top.location.pathname + window.top.location.search;
quelle
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">
method="get"
- behebt das Problem.if method="post"
dann kommt nur eine Warnung.quelle
Ich habe eine Funktion geschrieben, die die Seite ohne Post-Submission neu lädt und auch mit Hashes funktioniert.
Dazu füge ich einen GET-Parameter in der aufgerufenen URL hinzu / ändere ihn, indem ich
reload
seinen Wert mit dem aktuellen Zeitstempel in ms aktualisiere.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; };
Denken Sie daran, wenn Sie diese Funktion in einem href-Attribut auslösen möchten, implementieren Sie sie folgendermaßen: Damit
href="javascript:reload();void 0;"
sie erfolgreich funktioniert.Der Nachteil meiner Lösung ist, dass die URL geändert wird, sodass dieses "Neuladen" kein echtes Neuladen ist, sondern ein Laden mit einer anderen Abfrage. Trotzdem könnte es Ihren Bedürfnissen entsprechen, so wie es für mich der Fall ist.
quelle
Sie sind nicht gezwungen, Javascript zu verwenden, um alles zu tun. Viele Probleme haben einfache Lösungen wie diese. Sie können diesen kniffligen Anker verwenden:
<a href=".">Continue</a>
Natürlich weiß ich, dass Sie möglicherweise eine automatische Lösung benötigen, aber dies wird in vielen Fällen hilfreich sein.
Viel Glück
quelle
Verwenden von Meta Refresh in HTML
<meta http-equiv='refresh' content='1'>
mit meta refresh in php
echo "<meta http-equiv='refresh' content='1'>"
quelle
Hier ist eine Lösung, die immer funktionieren sollte und den Hash nicht entfernt.
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;
quelle
Die anderen Lösungen mit
window.location
haben bei mir nicht funktioniert, da sie überhaupt nicht aktualisiert wurden. Ich habe also ein leeres Formular verwendet, um neue und leere Postdaten an dieselbe Seite zu übergeben. Dies ist eine Möglichkeit, dies basierend auf dieser Antwort zu tun :function refreshAndClearPost() { var form = document.createElement("form"); form.method = "POST"; form.action = location.href; form.style.display = "none"; document.body.appendChild(form); form.submit(); //since the form is empty, it will pass empty postdata document.body.removeChild(form); }
quelle
Wenn Sie
GET
stattdessen die Methode verwendenPOST
, können wir die Werte der Formulardatei nicht verwenden. Wenn Sie verwendenwindow.opener.location.href = window.opener.location.href;
, können wir dieJSP
Datenbank auslösen und den Wert abrufen, aber das einzige ist, dass das nicht aktualisiert wird, obwohl das Scriplet die Formularwerte enthält.quelle