ここに行く場合:ブラウザの履歴に影響を与えずにナビゲーションを達成するにはどうすればよいですか?
フォームに記入せずに[送信手順]をクリックすると、完全で非アヤックスのリクエストが行われているようです。
ただし、ブラウザの履歴を見ると、前のページ(resend_password)は履歴にありません。あたかもajaxリクエストをしたかのようです。
twitterは何をしているのですか?これは本当にアヤックスのリクエストですか、それとも何か面倒なことをしていますか?
ここに行く場合:ブラウザの履歴に影響を与えずにナビゲーションを達成するにはどうすればよいですか?
フォームに記入せずに[送信手順]をクリックすると、完全で非アヤックスのリクエストが行われているようです。
ただし、ブラウザの履歴を見ると、前のページ(resend_password)は履歴にありません。あたかもajaxリクエストをしたかのようです。
twitterは何をしているのですか?これは本当にアヤックスのリクエストですか、それとも何か面倒なことをしていますか?
これは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
関数を使用してトリガーされます。ブラウザの履歴は変更されません。
window.location.replace
はページを読み込みますが、履歴には保存されません。
window.location.replace('http://twitter.com/account/resend_password');
私はこれ以上のものだと思います。リダイレクトを同じページに複製すると、ブラウザの履歴が向上します。 – Brian
@ブライアン:答えを初めて投稿したときは、何もテストを行っていませんでした。今、私はテストして、それは働いた。リダイレクトでサーバー側からブラウザにHTTP応答コード302を送信してもよろしいですか? –
「フォーム処理後のリダイレクト」などの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/...などがあります。 –