0

ここに奇妙な問題があります-以下を参照してください。

ページX

  • 投稿としてメソッドを持つフォームが含まれています
  • ユーザーがフォームを送信します-フォームの検証があります。
  • すべてが検証されたら、データを保存し、セッションにフラッシュデータメッセージを設定し(つまり、クエリの成功/失敗)、ユーザーをcurrent_ur()にリダイレクトします。
  • これで、フラッシュメッセージが表示されます。を押すとF5、フォームをもう一度送信しますか?

これは単にページを更新するべきではありませんか?別の送信リクエストを停止するにはどうすればよいですか?ページYにリダイレクトしてF5そこで押すと、再送信を求められませんか?私はここで迷子になっています!

4

1 に答える 1

0

OKみんな

これはCodeIgniter問題ではありません。の問題Firefoxです。14.0.1のバージョンを使用していFirefoxます。

同じフォームとプロセスを(最新)で試しIE 7, 8, 9ました。Safari 5, Chromeフォームを再送信するための確認ダイアログボックスが表示されませんF5


アップデート

Firefoxでこのメッセージが表示されます-

このページを表示するには、Firefoxは以前に実行されたアクション(検索や注文確認など)を繰り返す情報を送信する必要があります。

別のスクリプト(CIなし)をセットアップし、Firefoxでテストしました。同様のプロセスを作成しようとしました(つまり、同じページに投稿してリダイレクトします)...このメッセージはまったく表示されません。更新は問題なく機能します。だから私は今CIに戻りますか?

アップデート2

OK私は今それをクラックしたと思います-

CIのリダイレクト関数を使用しています(以下を参照)。2番目のパラメーターはデフォルト値を「auto」とし、それが完了すると、Firefoxに上記のメッセージをスローさせるautoヘッダーを送信します。header('Refresh:0;url='.$uri);上記のように、他のブラウザでは同じ動作をしません。私はそれが誰かを助けることを願っています。

function redirect($uri = '', $method = 'auto', $http_response_code = 302)
{
    if ( ! preg_match('#^https?://#i', $uri))
    {
        $uri = site_url($uri);
    }

    // IIS environment likely? Use 'refresh' for better compatibility
    if (DIRECTORY_SEPARATOR !== '/' && $method === 'auto')
    {
        $method = 'refresh';
    }

    switch($method)
    {
        case 'refresh':
            header('Refresh:0;url='.$uri);
            break;
        default:
            header('Location: '.$uri, TRUE, $http_response_code);
            break;
    }
    exit;
}
于 2012-08-03T13:44:23.363 に答える