2

私のXPageには、を使用しているように見えるxe:djxDataGriddojox.grid.datagrid)があります。xe:restServicedojox.data.JsonRestStore

プロキシがなくてもすべて正常に動作しますが、企業ポリシーにより、クライアントはプロキシ経由でアプリケーションにアクセスします。ユーザーがDataGridのデータを更新した後、プロキシの背後でアクセスすると古い値が表示されます。

REST Control /JsonRestStoreがデータを取得するためにajaxGETリクエストを送信する場合、Cache-Controlリクエストヘッダーにパラメーターはありません。Expiresまた、Dominoは応答ヘッダーにパラメーターを配置しません。これが、古いバージョンのGETリクエストがプロキシによってキャッシュされる理由だと思います。

ブラウザでキャッシュを無効にしようとしましたが、プロキシがリクエストをキャッシュしていることを示すのに役立ちません。

私はこれが次のいずれかによって解決できると信じています:

  1. Cache-Controlリクエストヘッダーにパラメータを設定するOR
  2. Expires応答ヘッダーにパラメーターを設定する

しかし、私はこれらのいずれかを設定する方法を見つけていません。XPageの場合、DominoはExpires:-1応答ヘッダーを設定しますが、次のようなajaxGET要求の場合は設定しません。

/mypage.xsp/?$$viewid=!ddrg6o7q1z!&$$axtarget=view:_id1:_id2:callback1:restService1

これにより、JSONデータがJsonRestStoreに返され、プロキシによってキャッシュされます。

1つのオプションは、プロキシへの例外を取得して、このサイトへのリクエストがプロキシキャッシュをバイパスするようにすることです。しかし、例外は一般的に簡単に通過することはできません。

何か案は?ありがとう。

Update1

私の同僚は、dojox.data.JsonRestStoreによって行われたxhr GETリクエストをインターセプトし、キャッシュを防ぐためにURLに時間パラメーターを追加できることを提案しました。これについての私の質問は次のとおりです。

ページ上のすべてのDojoxhrリクエストでキャッシュを防止する

Update2

@SvenHasselbachには、すべてのxhrのキャッシュを防ぐための優れたソリューションがあります。

http://openntf.org/XSnippets.nsf/snippet.xsp?id=cache-prevention-for-dojo-xhr-requests

完全に機能しているようで、&dojo.preventCache=パラメータがURLに追加され、リクエストはこのパラメータでも正しいJSONを返すようです。しかし、そのコードを使用すると、DataGridが機能しなくなります。すべてのxhrはこのエラーを引き起こします:

Firefox

FirefoxとChromeで試してみました。xhrインターセプトがまだ実施されていないため、データの最初のページは引き続き読み込まれますが、後続のページには各セルに「...」のみが表示されます。

4

1 に答える 1

1

解決策は、JulianBussのブログのコメントセクションにあるSvenHasselbachのコードで、少し変更する必要があります。

に変更xhrPostxhrGet、コードをに配置しませんでしたdojo.addOnLoad。そこに配置されたとき、DataGrid/Storeによる最初のXHRでは効果がありませんでした。

headersまた、既存のヘッダーを上書きするため、変更を削除しました。RESTコントロールがサーバーxhrGetにURLを使用してデータを要求すると、要求された行は次のようにHTTPヘッダーに含まれます。

Range: items=0-9

この(および他の)ヘッダーは、元のコードを使用すると消えます。ヘッダーを追加するだけでは、既存のヘッダーを取得してargs追加する必要があります。URLにパラメータを追加するだけで十分なはずなので、その必要性はわかりませんでした。これが私が使用している非常に単純なコードです:

if( !(dojo._xhrGet )) {
 dojo._xhrGet = dojo.xhrGet;
}

dojo.xhrGet = function (args) {
 args['preventCache'] = true;
 return dojo._xhrGet(args);
}

今、私はすべての行を取得しており、すべてのXHR Get URL&dojo.preventCache=には、まさに私が望んでいたものであるパラメーターがあります。次に、お客様の環境でテストして、これで問題が解決するかどうかを確認します。

アップデート

Julianが彼のブログで指摘しているように、Webサイトルールを使用して応答ヘッダーを設定Expiresまたはhttpすることもできます。cache-control

アップデート

顧客はそれが彼らのために今働いていると報告します!

于 2013-01-28T12:49:32.840 に答える