2012-06-02 8 views
8

$_POSTデータと$_SESSIONを失うことなくページをリロードするボタンを作成したいとします。
はウェブ上で、私は、コードのこの部分が見つかりました:"location.reload()"はPOST/SESSIONデータを失っていますか? (F5/Ctrl + Rはデータを保持しますか?)

onclick="document.location.reload();" 

をそして、ここに私のボタンのコードです:

<a class="button" href="" style="font-size: 0.7em; padding: 5px 10px;" onclick="document.location.reload();">Recharger la page</a> 

しかし、私はボタンをクリックしたとき、私は$_POSTデータを失い、 $_SESSION

私はキーボードコマンドはCtrl + R(クローム)またはF5(Firefoxの、IE9)をしようとした場合は、ブラウザは、私は再びフォームを送信しようとしていることを私に通知する警告を示しています。私が受け入れるなら、それは機能します。

JavaScriptコマンドを使用して、このようなブラウザの更新を再現するにはどうすればよいですか?または、私のボタンのコードが間違っていますか?

ありがとうございました。

答えて

2

これは、あなたがあなたが同じ場所にいる限り、どのような場合にも起こります。しかし、POSTリクエストの後にリダイレクトするのは、あなたがしようとしていることをまったく避けるために一般的です。

あなたのコードがうまくいかない理由は、href=""が現在のURLに対してGETリクエストを引き起こすという事実です。 href="#"を使用して、新しいページを読み込まないようにするか、onclick="..."コードの末尾にreturn false;を追加してください。

+0

を返したJavaScriptの他の作品。私はちょうどjavascriptのボタンでそれを行う方法を見つけたいですか? – Zorkzyd

+0

'location.reload()'は、http://jsfiddle.net/ThiefMaster/thTyD/で見ることができるようにジョブを実行する必要があります(出力ペインが実際にPOST経由でロードされるように、まず「実行」をクリックする必要があります)。 – ThiefMaster

+0

しかし、私のコードは動作しません... onclick = "document.location.reload();"。それはhref = ""に起因するのでしょうか? – Zorkzyd

0

Ctrl + Rは、ページをリフレッシュし、はキャッシュをクリアします。そして私はあなたがInternet Explorerを使用していると思いますか?いくつかの他のブラウザを使用すると、Ctrl + F5を打ったとき、このように振る舞うが、Ctrl + R

ソースではない:
https://superuser.com/questions/205279/ctrlf5-vs-ctrlr-on-browsers
Browser issue in Ctrl-R

+0

私は通常FFで働いていますが、私はcross-browsersであることを要求するプロジェクトにいます:) – Zorkzyd

9

、これは "ハード" リフレッシュを実行します

location.reload(true); 

をない使用してみてくださいDOMを再構築するだけでなく、サーバーからリソースを再取得することもできます。

You can read more at the Mozilla Developer wiki.

location.reload(true)を使用してシミュレートすることができますCtrl+F5/Ctrl+Rながらどうやら、location.reload()は、スクリプトでF5のと同じです。 ThiefMasterが述べたように

はまた、あなたはあなたのonclick文の末尾に;return falseを逃している、またはあなたがリンクを次の中からブラウザを防ぐためにhref * javascript:void 0に設定する必要があります。

*または[F5]キーを押しに、例えばFirefoxで、それが正常に動作するとundefined

+0

私はlocation.reload(true)を使用すると、ブラウザは再びフォームを送信しようとしていることを通知するアラートを出しています。私が受け入れるなら、それはうまくいかない。それはhref = ""に起因するのでしょうか? – Zorkzyd

+0

これは、ブラウザが初めてページを読み込んだときに使用したのとまったく同じパラメータと要求メソッドを使用してリロードするためです。これを繰り返す必要がない場合は、最初にデータを$ _SESSIONに格納し、 'header(" See Other ")'と 'header(" Location:$ _SERVER ['REQUEST_URI'] ' ) 'を使ってページをGETリクエストでリロードします。 – user2428118

+0

あなたの答えはありがたいですが、ThiefMasterは私に解決策を教えてくれました。 – Zorkzyd

関連する問題