2011-07-04 2 views
1

ここに行く場合:ブラウザの履歴に影響を与えずにナビゲーションを達成するにはどうすればよいですか?

フォームに記入せずに[送信手順]をクリックすると、完全で非アヤックスのリクエストが行われているようです。

ただし、ブラウザの履歴を見ると、前のページ(resend_password)は履歴にありません。あたかもajaxリクエストをしたかのようです。

twitterは何をしているのですか?これは本当にアヤックスのリクエストですか、それとも何か面倒なことをしていますか?

答えて

0

これはajaxリクエストではありません。

どちらかといえば難しいことではありません。

HTTPレスポンスコード302(一時的に移動)でHTTP POST要求に応答しています - http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirectionを参照してください。ブラウザーは、HTTP応答コード番号303のように応答します(「その他」を参照)。

実際には、同じページへのリダイレクトだけが発生します。


編集:テストのためにコードを追加しました。

私は、次のコードでテストしており、それが上と言われているものを確認した:私は、サーバー側の言語としてPHPを使用しています

<form method="post"><input type="submit" value="click here" /></form> 
<?php 
if ($_SERVER['REQUEST_METHOD'] == 'POST') 
    header('Location: /test.php', true, 302); 
?> 

。このスクリプトをwebserverの公開ルートフォルダにtest.phpという名前で保存しました。これは、Twitterのページと全く同じように動作します。フォーム送信ボタンをクリックすると、302リダイレクトheader関数を使用してトリガーされます。ブラウザの履歴は変更されません。

+0

私はこれ以上のものだと思います。リダイレクトを同じページに複製すると、ブラウザの履歴が向上します。 – Brian

+0

@ブライアン:答えを初めて投稿したときは、何もテストを行っていませんでした。今、私はテストして、それは働いた。リダイレクトでサーバー側からブラウザにHTTP応答コード302を送信してもよろしいですか? –

+0

「フォーム処理後のリダイレクト」などのGoogleリサーチを行う必要があります(http://www.google.com/search?q=redirection+after+form+processing)。技術の背後にある意図は、同じデータの2回目の提出を避けることです。http://www.thefutureoftheweb.com/blog/get-redirect-after-postまたはhttp://raventools.com/を参照してください。 blog/redirect-after-form-processing/...などがあります。 –

2

window.location.replaceはページを読み込みますが、履歴には保存されません。

window.location.replace('http://twitter.com/account/resend_password');