web-dev-qa-db-ja.com

JavaScriptでPOSTDATA警告なしでページをリロードするにはどうすればよいですか?

次を使用してページをリロードしたい:

window.location.reload(true); 

しかし、更新機能が前のPOST=フォームデータを再送信するため、POSTDATA警告が表示されます。この警告なしでページを更新するにはどうすればよいですか?

更新済み:プロジェクトを制御できません。 POST自体は回避できません!

64
Ricibald

JavaScriptでwindow.locationを変更するだけでdangerousになります。ユーザーが戻るボタンを押して投稿を再送信できるためです。予期しない結果になる可能性があります(重複購入など)。 PRGははるかに優れたソリューションです

Post/Redirect/Get(PRG)パターンを使用

この問題を回避するために、多くのWebアプリケーションはPRGパターンを使用します。HTMLページを直接返す代わりに、POST操作はリダイレクトコマンド(HTTP 303応答コード(場合によって302)を使用してHTTP "Location"レスポンスヘッダー)、HTTP GETリクエストを使用して別のページを読み込むようにブラウザに指示すると、予期しない副作用なしに結果ページを安全にブックマークまたはリロードできます。

59
Sam Hasler

警告なしに更新することはできません。 refreshは、最後のアクションを繰り返すようブラウザに指示します。最後のアクションの繰り返しにデータの再送信が含まれる場合、ユーザーに警告するかどうかを選択するのはブラウザ次第です。

次の操作を行うと、新しいセッションで同じページに再移動できます。

window.location = window.location.href;
111
Rex M

Rexのソリューションを使用してリロードしないアンカー/ハッシュURL(#を含む)に問題がありました...

だから私は最終的にハッシュ部分を削除することになりました:

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

POST警告をバイパスするには、完全なURLでページをリロードする必要があります。正常に動作します。

window.location.href = window.location.protocol +'//'+ window.location.Host + window.location.pathname;
12
Nikl

window.location.replace(window.location.href)はどうですか。

5
david

これは働いた

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

それなしでは機能しなかった理由

falseを返します。
3
Prasanna

JavaScriptを使用できます。

window.location.assign(document.URL);

FirefoxとChromeで私のために働いた

このリンクを確認してください: http://www.codeproject.com/Tips/433399/PRG-Pattern-Post-Redirect-Get

3
Dan

投稿データの処理が完了した段階で、ページをもう一度表示したい場合は、window.locationを使用し、クエリパラメータとしてランダムな文字列を追加して、新しいバージョンを保証することもできます。ページ。

2
AJM

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;
2
Patlatus
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">

method="get"-問題を解決します。

if method="post"その後、警告のみが表示されます。

1
ABC

投稿を送信せずにページをリロードし、ハッシュでも機能する関数を作成しました。

これを行うには、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を変更することです。したがって、この「リロード」は実際のリロードではなく、別のクエリを使用したロードです。それでも、それは私にとってのようにあなたのニーズに合うかもしれません。

0
modiX

すべてを行うためにJavaScriptを使用する必要はありません。多くの問題には、このような簡単な解決策があります。このトリッキーなアンカーを使用できます。

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

もちろん、自動ソリューションが必要かもしれませんが、これは多くの場合に役立ちます。

幸運を

0
Mahyar Damavand