在我的 XPage 中,我有一个xe:djxDataGrid
( dojox.grid.datagrid
),它使用xe:restService
了似乎使用的dojox.data.JsonRestStore
.
没有代理一切正常,但由于公司政策,我的客户通过代理访问应用程序。在用户更新 DataGrid 中的数据后,它会在代理后面访问时显示旧值。
REST Control/JsonRestStore 发送ajax GET 请求获取数据时,请求头中没有Cache-Control
参数。并且 Domino 不会Expires
在响应头中放置参数。我相信这就是为什么旧版本的 GET 请求被代理缓存的原因。
我们试图在浏览器中禁用缓存,但这无济于事,这表明代理正在缓存请求。
我相信这可以通过以下方式解决:
Cache-Control
在请求标头中设置参数或Expires
在响应标头中设置参数
但是我还没有找到设置其中任何一个的方法。对于 XPage Domino 设置Expires:-1
响应标头,但不适用于 ajax GET 请求,即:
/mypage.xsp/?$$viewid=!ddrg6o7q1z!&$$axtarget=view:_id1:_id2:callback1:restService1
这会将 JSON 数据返回到 JsonRestStore 并由代理缓存。
一种选择是尝试获取代理的例外情况,以便对该站点的请求将绕过代理缓存。但是例外通常不容易通过。
有任何想法吗?谢谢。
更新1
我的同事建议我可以拦截 dojox.data.JsonRestStore 发出的 xhr GET 请求,并在 URL 中添加时间参数以防止缓存。这是我的问题:
更新2
@SvenHasselbach 有一个很好的解决方案来防止所有 xhrs 的缓存:
http://openntf.org/XSnippets.nsf/snippet.xsp?id=cache-prevention-for-dojo-xhr-requests
它似乎工作得很好,&dojo.preventCache=
参数被添加到 URL 中,并且请求似乎也使用这个参数返回了正确的 JSON。但是当我使用该代码时,DataGrid 停止工作。每个 xhr 都会导致此错误:
尝试使用 Firefox 和 Chrome。数据的第一页仍然加载,因为 xhr 拦截尚未到位,但后续页面在每个单元格中仅显示“...”。