10

遅延も追加したい次のphpコードがあります。

<?php
    echo "Message has been sent.";
    header("Location: page2.php", true, 303);
    exit;
?>

上記のコードは速すぎるため、メッセージが表示されません。

私が試してみました:

<?php
    sleep(5);
    echo "Message has been sent.";
    header("Location: page2.php", true, 303);
    exit;
?>

これもメッセージを表示しませんが、5 秒間スリープします。これは時間の無駄です。

リダイレクトする前に 5 秒間メッセージを表示するにはどうすればよいですか?

4

7 に答える 7

36

このリダイレクトはブラウザがヘッダーを取得するとすぐに発生するため、HTTP ロケーション リダイレクトではこれを行うことはできません。代わりに、ヘッダーで更新リダイレクトを使用します。

header( "Refresh:5; url=http://www.example.com/page2.php", true, 303);

これは最新のブラウザーで動作するはずですが、標準化されていないため、同等の機能を得るには、メタ リフレッシュ リダイレクトを使用します (つまり、完全な HTML も出力する必要があります)。

<meta http-equiv="refresh" content="5;url=http://www.example.com/page2.php"> 

ウィキペディアのページから:

リダイレクト時、または新しいリソースが作成されたときに使用されます。この更新は X 秒後にリダイレクトされます。これは、Netscape によって導入され、ほとんどの Web ブラウザーでサポートされている独自の非標準ヘッダー拡張機能です。

于 2012-07-02T18:20:02.770 に答える
3

クライアント側のスクリプトを使用してリダイレクトを実行します。

<script>
window.setTimeout(function() {
    window.location = 'page2.php';
  }, 5000);
</script>
<p>Message has been sent.</p>
于 2012-07-02T18:21:09.510 に答える
2

ヘッダー (場所) リダイレクトを使用している場合、メッセージは表示されません。実際、ヘッダーが送信される前に出力が開始されるため、そのリダイレクトはまったく機能しないはずです。echo '<meta http-equiv="refresh" content="5;URL=\'http://example.com/\'">';

代わりに、 5 秒の遅延があるこのように、メタ タグの更新を遅延してエコーする必要があり ます。または、(より適切に) JS リダイレクトを出力することもできます。これは、メタ リフレッシュ タグが非推奨になっているためです。

于 2012-07-02T18:19:50.820 に答える
0

それが役立つかどうかはわかりませんが、メッセージの送信後にクリーンにする必要があるフォームで同じ問題を扱っていたので、入力値を空に変更できることを説明するこの回答を見つけました。

これが答えです: ページのリロード時にテキスト入力の値をリセットするにはどうすればよいですか?

これが、クラス .form-control を使用して問題を解決する方法です

$(document).ready(function() {
   $(".form-control").val('');
});
于 2014-01-12T00:43:35.117 に答える