5

Webフォームが送信され、ユーザーを別のページに移動する場合、ユーザーがフォームを再度送信するために[戻る]ボタンをクリックすることがよくあります(私の場合、フォームは高度な検索です)。

ユーザーが[戻る]をクリックしたときに選択したフォームオプションを確実に保持するにはどうすればよいですか(多くのフォーム要素の1つだけを変更する場合でも、フォームに最初から入力する必要はありません)。

フォームオプションをセッションデータ(Cookieまたはサーバー側)に保存するルートをたどる必要がありますか、それともブラウザにこれを処理させる方法がありますか?

(環境はPHP / JavaScriptであり、サイトはIE6+およびFirefox2+で動作する必要があります)

4

8 に答える 8

6

私はあなたがブラウザに翻弄されていると信じています。ヒットバックすると、ブラウザーはサーバーに対してコンテンツの新しい要求を行わず、キャッシュを使用します(とにかく私が見たほとんどすべてのブラウザーで)。つまり、サーバー側はすべて外に出ています。

結果ページのonunloadイベント中に検索結果をCookieに保存し、検索ページのjavascriptでCookieを読み取ってフォームに入力するなど、非常に複雑なことを実行できるかどうか疑問に思っていますが、これは単なる推測です。 、それがうまくいくかどうかはわかりません。

于 2008-10-29T17:00:51.247 に答える
3

私はそれをセッションに入れます。
それは最も信頼できるものになるでしょう、そして彼らがまっすぐに「戻って」行かなくても、それはまだそこに彼らの検索オプションを持っています。それをクッキーに入れることも機能しますが、それが非常に小さいフォームでない限り、お勧めできません。

于 2008-10-29T17:00:20.780 に答える
3

ブラウザー次第ですが、ほとんどの場合、何もする必要はありません。

IE、Firefox などは、前のページのフォームの内容を喜んで記憶し、[戻る] をクリックすると再び表示します。 -キャッシュするか、スクリプトから完全にフォームを構築します。

(セッションに何かを入れると、ブラウザが同じフォームで 2 つのタブを開いて混乱する可能性があります。そのようなことを行うときは十分に注意してください。)

于 2008-10-29T17:35:29.617 に答える
2

あなたが抱えている問題は、ブラウザがページのキャッシュされたバージョンを返し、おそらくサーバーにそれを再度要求しないことです。つまり、セッションの使用は無関係です。

ただし、AJAXを使用して、ページのロードイベントで以前に送信されたフォームの詳細をロードすることはできます。

于 2008-10-29T17:04:27.417 に答える
0

基本的には、POST 後に何らかの方法で (おそらくセッション変数に) サーバーに保存する必要があります。また、ロード時に実行するようにフォーム ページに Javascript をセットアップして、AJAX 呼び出しを発行してサーバーからデータを取得し (たとえば、JSON 形式で)、フォーム フィールドにデータを事前入力する必要があります。

jQuery コードの例:

$( document ).ready( function() {
  $.getJSON(
    "/getformdata.php",
    function( data ) {
      $.each( data.items, function(i,item) {
        $( '#' + item.eid ).val( item.val );
      } );
    });
} );

/getformdata.php は、次のようなデータを返す場合があります。

{
  'items': [
    {
      'eid': 'formfield1',
      'val': 'John',
    },
    {
      'eid': 'formfield2',
      'val': 'Doe',
    }
  ]
}

セッションに対してまだ何も保存されていない場合は、明らかに空の配列が返されます。上記のコードはラフでテストされていませんが、基本的な考え方は理解できるはずです。

ちなみに、現在のバージョンの Opera と Firefox では、戻るときにフォーム フィールドの内容が保持されます。JS コードはこれを上書きしますが、安全なはずです。

于 2008-10-29T17:13:57.287 に答える
0

別の ajaxy オプション (したがって、javascript を使用しないユーザーには適していません) は、javascript を介してフォームを送信し、確認ページに移動することです (または、ボタンをメッセージに置き換えてフォームにメッセージを表示します)。そうすれば、「戻る」ことはできません。

于 2008-10-29T17:14:21.313 に答える
0

また、javascript を使用してローカルですべてを実行することもできます。したがって、検索値とともに Cookie を保存し、ページの読み込み時に Cookie が存在するかどうかを確認します。このようなもの:

$('#formSubmitButton').click( function() {
    var value = $('#searchbox').val();
    var days = 1;
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    document.cookie = "searchbox="+value+expires+"; path=/";
});

$(document).ready( function() {
    var nameEQ = "searchbox=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) var valueC = c.substring(nameEQ.length,c.length);
   }
   $('#searchbox').val(valueC);
});

これをテストしていませんが、動作するはずです。これには jQuery が必要です。

Cookie 関数は次の場所から来ました: http://www.quirksmode.org/js/cookies.html

ところで、FireFox と IE の両方がデフォルトでこの動作をしていると言わざるを得ません。

于 2008-11-08T22:57:55.417 に答える
0

送信する前に値を Cookie に保存しないのはなぜですか? いつ入力されたかを示すタイムスタンプまたはトークンを含めることもできます。次に、ページが読み込まれるときに、Cookie からのデータをフィールドに入力するか、新しい検索であるため空白のままにするかを決定できます。

于 2008-10-29T17:18:36.843 に答える