在我的XPage中,我有一個xe:djxDataGrid
(dojox.grid.datagrid
),它使用xe:restService
,似乎使用dojox.data.JsonRestStore
。在ExtLib REST控件(使用dojox.data.JsonRestStore)中禁用緩存
一切工作正常,沒有代理,但我的客戶端通過代理訪問應用程序,因爲公司政策。用戶更新DataGrid中的數據後,它會在代理後面顯示舊值。
當REST Control/JsonRestStore發送ajax GET請求以獲取數據時,請求標頭中沒有Cache-Control
參數。而Domino不會在響應頭中放置Expires
參數。我相信這就是爲什麼舊版本的GET請求被代理緩存的原因。
我們試圖在瀏覽器中禁用緩存,但是這並沒有幫助,這表明代理正在緩存請求。
我相信這可以解決或者通過:
- 設置在請求的頭部
Cache-Control
參數或 - 響應頭
設置Expires
參數,但我還沒有找到一種方法,設置其中任何一個。對於XPage上多米諾骨牌Expires:-1
響應頭,但不是爲AJAX GET請求是:
/mypage.xsp/?$$viewid=!ddrg6o7q1z!&$$axtarget=view:_id1:_id2:callback1:restService1
這JSON數據返回到JsonRestStore,並得到由代理緩存。
一種方法是嘗試獲取代理的例外,以便對該站點的請求將繞過代理緩存。但例外情況通常不容易獲得。
任何想法?謝謝。
UPDATE1
我colleque建議我可以攔截dojox.data.JsonRestStore提出的XHR GET請求和時間參數添加到URL,以防止緩存。下面是我對這個問題:
Prevent cache in every Dojo xhr request on page
UPDATE2
@SvenHasselbach具有防止緩存所有XHR時一個很好的解決方案:
http://openntf.org/XSnippets.nsf/snippet.xsp?id=cache-prevention-for-dojo-xhr-requests
這似乎很好地工作,&dojo.preventCache=
參數被添加到URL並且請求似乎也使用此參數返回正確的JSON。 但是當我使用該代碼時,DataGrid停止工作。每XHR導致此錯誤:
試圖與Firefox和Chrome。數據的第一頁仍然加載,因爲xhr攔截還沒有到位,但隨後的頁面只顯示「...「在