2012-11-30 18 views
5

私は現在、HTTPポストフォームと履歴pushstateに少し問題があります。history.pushstateとHTTP POSTフォームの再投稿

ユーザーがexample.com/page-1にPOSTフォームを送信し、このページ内のリンクをクリックすると、history.pushstateを使用してexample.com/page-2にリダイレクトされます。 JSスクリプトは現在のURLを変更し、古いものを履歴にプッシュし、新しいコンテンツを表示します。これは私にとって完璧に機能します。

問題:ユーザがexample.com/page-2上で手動でページ(CTRL + Rまたはリフレッシュボタン)を更新した後、のchrome再度フォームを送信するようにユーザに促します。フォームは実際にexample.com/page-1にあり、この「新しい」ページで再度尋ねる理由はありません。

ポストステートの変更時にjavascriptで以前に送信されたすべてのデータを消去して、ブラウザからの再送信プロンプトを防ぐ方法はありますか?あるいは私の歴史国家で何かを逃していますか?それとも、ブラウザでまだ実装されていないものですか?

私は他のブラウザでpushstateを実装していないので、クロムでテストしました。

答えて

1

代わりに代わりにreplaceStateを試してみますか? thisを参照してください。

replaceState()方法

history.replaceState()は正確にreplaceState除くhistory.pushState()()のように動作する新しいものを作成するのではなく、現在の履歴エントリを修正します。

replaceState()は、ユーザーの操作に応じて現在の履歴エントリの状態オブジェクトまたはURLを更新する場合に特に便利です。

+0

こんにちは、replaceStateで同じ問題が発生しましたが、問題を解決するAjax経由でフォームを送信しています。私は、javascript history.pushstateとajax経由でフォームを送信せずにreplacestateを使うことは、jquery、mootoolsなどで行うのはかなり簡単なので、やってはいけないと思います。 – pafounet

0

私は同じ問題を抱えています。私はBackboneJSでHistory APIを使用しています。

私が考えている解決策は、サインイン後にフォームがリダイレクトされる中間ページを持つことです。この中間ページの目的は、宛先ページの前に非POSTページを追加して、フォームを再送信するよう促します(Chromeは冗長エントリを追加しないようにします)。

ご例えば、サーバはexample.com/page-1a

example.com/page-1aにユーザーをリダイレクトする必要がありexample.com/page-1でPOSTフォームを提出した後、ユーザーの資格情報が存在していることを確認することができ、その後、example.com/page-2にリダイレクト。これはあなたの問題を解決します、私は信じています。リダイレクションメカニズムの

、私が考えることができる3つのオプションがある:

  1. サーバー側
  2. のJavaScript(location.href="page-2")リダイレクトHTMLヘッダ(<meta http-equiv="refresh" content="0; URL='http://example.com/page-2'" />

個人的に私はオプション1と2を試しました - 彼らは私のためにうまく動作します。お役に立てれば!