次を使用してページをリロードしたい:
window.location.reload(true);
しかし、更新機能が前のPOST=フォームデータを再送信するため、POSTDATA警告が表示されます。この警告なしでページを更新するにはどうすればよいですか?
更新済み:プロジェクトを制御できません。 POST自体は回避できません!
JavaScriptでwindow.location
を変更するだけでdangerousになります。ユーザーが戻るボタンを押して投稿を再送信できるためです。予期しない結果になる可能性があります(重複購入など)。 PRGははるかに優れたソリューションです
この問題を回避するために、多くのWebアプリケーションはPRGパターンを使用します。HTMLページを直接返す代わりに、POST操作はリダイレクトコマンド(HTTP 303応答コード(場合によって302)を使用してHTTP "Location"レスポンスヘッダー)、HTTP GETリクエストを使用して別のページを読み込むようにブラウザに指示すると、予期しない副作用なしに結果ページを安全にブックマークまたはリロードできます。
警告なしに更新することはできません。 refreshは、最後のアクションを繰り返すようブラウザに指示します。最後のアクションの繰り返しにデータの再送信が含まれる場合、ユーザーに警告するかどうかを選択するのはブラウザ次第です。
次の操作を行うと、新しいセッションで同じページに再移動できます。
window.location = window.location.href;
Rexのソリューションを使用してリロードしないアンカー/ハッシュURL(#を含む)に問題がありました...
だから私は最終的にハッシュ部分を削除することになりました:
window.location = window.location.href.split("#")[0];
POST警告をバイパスするには、完全なURLでページをリロードする必要があります。正常に動作します。
window.location.href = window.location.protocol +'//'+ window.location.Host + window.location.pathname;
window.location.replace(window.location.href)はどうですか。
これは働いた
<button onclick="window.location.href=window.location.href; return false;">Continue</button>
それなしでは機能しなかった理由
falseを返します。
JavaScriptを使用できます。
window.location.assign(document.URL);
FirefoxとChromeで私のために働いた
このリンクを確認してください: http://www.codeproject.com/Tips/433399/PRG-Pattern-Post-Redirect-Get
投稿データの処理が完了した段階で、ページをもう一度表示したい場合は、window.locationを使用し、クエリパラメータとしてランダムな文字列を追加して、新しいバージョンを保証することもできます。ページ。
Niklのバージョンはgetクエリパラメーターを渡しません。次の修正バージョンを使用しました。
window.location.href = window.location.protocol +'//'+ window.location.Host + window.location.pathname + window.location.search;
または私の場合、一番上のページ\フレームを更新する必要があったため、次のバージョンを使用しました
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"
-問題を解決します。
if method="post"
その後、警告のみが表示されます。
投稿を送信せずにページをリロードし、ハッシュでも機能する関数を作成しました。
これを行うには、reload
というURLにGETパラメーターを追加/変更して、その値をミリ秒単位の現在のタイムスタンプで更新します。
_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;
};
_
Href属性でこの関数をトリガーする場合は、href="javascript:reload();void 0;"
のように実装して、正常に機能するようにしてください。
私のソリューションの欠点は、URLを変更することです。したがって、この「リロード」は実際のリロードではなく、別のクエリを使用したロードです。それでも、それは私にとってのようにあなたのニーズに合うかもしれません。
すべてを行うためにJavaScriptを使用する必要はありません。多くの問題には、このような簡単な解決策があります。このトリッキーなアンカーを使用できます。
<a href=".">Continue</a>
もちろん、自動ソリューションが必要かもしれませんが、これは多くの場合に役立ちます。
幸運を