2


0

グリッドデータをキャッシュするjqGrid

ボタンをクリックすると、jqGridを含む別のページに移動する必要があります。ただし、ユーザーがデータを表示したい場合は、サーバーを呼び出す代わりにキャッシュして表示する必要があります。 フォーム値はデフォルトでキャッシュされていましたが、jqGrid …​キャッシュする方法は?

2 Answer


1


フォームはHTML仕様の一部であり、jqGridはそうではありません…​ なぜグリッドのデータがキャッシュされるのを期待しますか?

つまり、GET urlを使用してグリッドのデータを取得すると、IEなどの特定のブラウザーはGETの結果をキャッシュします。 データがキャッシュされないようにするには、URLを一意にする必要があります(タイムスタンプを追加するなど)。 ただし、これによりすべてのブラウザでデータがキャッシュされるわけではないことに注意してください。


1


データのキャッシングは実現できますが、簡単ではありません。 サーバー側で、選択したhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13 [キャッシュ戦略]に基づいていくつかのHTTPヘッダーを定義する必要があります。 たとえば、「Cache-Control」HTTPヘッダーのhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3[max-age]を使用できます。

Cache-Control: max-age=60

つまり、サーバーの応答はクライアント上で60秒間キャッシュされる必要があります。 これを使用する場合は、jqGridの追加パラメーター `prmNames:{nd:null}`を定義する必要があります。これにより、サーバーリクエストに含まれるタイムスタンプ付きの `nd`パラメーターの送信が削除されます。 この手順を実行すると、jqGridによって使用されるすべてのajaxリクエストは、時間間隔(60秒)中にローカルキャッシュから取得されます。

http://en.wikipedia.org/wiki/HTTP_ETag1.[ETags](エンティティタグ)に関して、固定キャッシュ時間としてより複雑な戦略を使用したサーバー側キャッシュの実装が可能です。 私のお気に入りの戦略ですが、その実装は比較的複雑です(https://stackoverflow.com/questions/3318277/guidance-on-a-better-way-to-retain-filtering-options-when-using-asp- net-mvc-2 / 3371155#3371155 [ASP.NET MVC 2を使用する場合のフィルターオプションを保持するためのより良い方法に関するガイダンス]およびhttps://stackoverflow.com/questions/2658443/concurrency-handling/2663654#2663654 [同時処理詳細については、SQLトランザクションの]を参照してください)。

データをキャッシュする方法を使用できない場合(何らかの理由で)、次の2つのバリアントの代替としてお勧めします。

jqGridパラメータを定義するフォームのボタンや他のフィルターと同じページにグリッドを作成します(https://stackoverflow.com/questions/2928371/how-to-filter-the-jqgrid-data-not-を参照) using-the-built-in-search-filter-box / 2928819#2928819 [組み込みの検索/フィルタボックスを使用しないでjqGridデータをフィルタリングする方法])。

*「jQuery.Remove()」または「jQuery.Empty()」に関するフォームと新しい「ajax」リクエストでページを「再描画」します。 たとえば、 `jQuery(" body ")。Empty()`または `jQuery(" div#main ")。Empty()`の場合、「

体の上のどこかにあります。 次に、ページ本体(またはid = "main"のdiv)に、 `jQuery(" body ")。load(" newPage.htm ")`または `jQuery(" div#main ")。loadのような呼び出しを入力できます。 ( "newPage.jsp") `。

これらの代替手段の利点は、同じページにとどまり、すべてのJavaScriptデータを使用できることです。 たとえば、グリッドが「loadonce:true」パラメータを使用している場合、「data」パラメータから古いjqGridデータを取得し、データ値を新しいjqGridの「data」パラメータとして使用して新しいjqGridを作成できます。