2011-07-11 10 views
1

私は次のシナリオを実装しようとしています:ajaxログイン時に元のページにリダイレクト

1)ユーザはログインしておらず、ページfooにあります。 2)ユーザーがライトボックスを表示しているページでログインをクリックします。 3)ユーザーがライトボックスからログインします。 4)ログイン成功時にページfooが更新されます。

手順1〜3が実行されます。今のステップ4では、ユーザーがそのライトボックスメソッドを使用してログインしている場合、ログイン時にユーザーは常にプロファイルページにリダイレクトされます。

ユーザーがログインアクセスを必要とするページを取得しようとしている場合、ページへのログインリダイレクトがあります。その後、ユーザーはログインし、ユーザーが移動しようとしていたページに自動的にリダイレクトされます。しかし、上記のシナリオでは、ユーザーは既にページ上にあり、ログイン時にそのページを更新したいと考えています。

上記の実装方法についてのヒントを教えてください。

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

redirect_to request.url 

しかし、これは302ステータスコード(レールを意味REDIRECTを発行することに注意して:

+0

ライトボックスフォームがajaxログイン要求をトリガすると仮定すると、ajaxコール成功ハンドラ関数でlocation.reload(true)を追加すると、現在のページを強制的にリロードすることができます。 – eugen

+0

@eugenはすでに私の答え:) – tybro0103

答えて

2

あなたの質問への答えは、現在のページにリダイレクトするのではなく、「さわやか」ことであろうデフォルト)。あなたは、あなたが望むステータスコードを指定することができます:

redirect_to request.url, :status => 301 

これは役に立ちます。

0

ライトボックスのログインフォームを(通常の投稿ではなく)ajax経由で送信します。 Rails 3では、フォームに:remote => trueを使用してください。 ajaxレスポンスでは、ページを更新するjavascriptをいくつか実行してください:window.location.href = window.location.href;

あなたのタスクを達成する方法はたくさんありますが、これは単なる1つのオプションです。あなたは簡単に多くの状況で使用することができますhttp://www.tmatthew.net/blog

+1

window.location.reload()は良いオプションではありません。ページをPOSTした直後にログインしようとしたとします。 1)POSTされたページをリフレッシュして情報を再度送信する2)ポップアップを表示して3)潜在的にユーザーエクスペリエンスを破る。より良い代替手段はwindow.location.href = window.location.hrefです。 –

+0

@Dominic Goulet非常に良い点、ありがとうございました! – tybro0103

0

一つのオプションは次のとおりです:

redirect_to :back

これはちょうどそれが発祥のページに戻ってブラウザを送り、私はそれが私のサイト上で私のためにうまく機能することがわかってきましたからの要求。これは、複数の場所に表示されるフォームがあり、フォームを送信しているユーザーが、特定のページにリダイレクトするのではなく、送信したページに戻るようにしたい場合に便利です。

+0

しかし、リクエストがXHRの場合、実際にページをDOMにロードすることはありません。 – Archonic

関連する問題