我有一个Spring AngularJS Web应用程序,我从Spring控制器获取JSON数据,并在角度工厂中使用$ http方法使用此数据,并为此编写必要的角度控制器。我使用html文件来显示这些数据。我在html页面中动态获取表单字段名称和字段类型。我的问题是,当我最初登录并转到相应的页面时,我得到的似乎是缓存问题。参数显示为来自html页面。只有在我刷新页面后才能获得正确的数据。任何人都可以帮我弄清楚发生了什么事吗?
答案 0 :(得分:1)
您可以将时间戳添加到JSON URL
var JSONURL = "your json url here";
var t = getTime();
$http({
method: 'GET',
url: JSONURL + "?t=" + t
}).success(function () {
});
答案 1 :(得分:0)
虽然Lee的答案是正确的,但是jQuery过去常常使用AJAX请求(我不知道它是否仍然存在)。但这很糟糕。
执行此操作的正确方法是在服务器响应中正确设置Cache-Control
,Pragma
和Expires
标头。既然你在服务器上使用Spring,我是否正确地假设你正在使用某种JSP Servlet容器(比如Apache Tomcat)?
如果是这样,Tomcat具有内置功能,您可以通过web.xml
文件执行此操作。看一下org.apache.catalina.filters.ExpiresFilter
课程。这是一个小样本:
<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresExcludedResponseStatusCodes</param-name>
<param-value>302, 304, 404, 500, 503</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType text/html</param-name>
<param-value>access plus 1 day</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType application/javascript</param-name>
<param-value>access plus 1 day</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType image</param-name>
<param-value>access plus 1 month</param-value>
</init-param>
</filter>
由于省略了application/json
,因此不会缓存任何JSON请求或响应。此设置在我们的Web应用程序中运行良好。
我要注意的一件事是,设置这些标头后,只需刷新浏览器页面就行不通 - 它仍将从本地缓存中获取。也就是说,Chrome可以选择在调试控制台打开时禁用缓存,因此可以轻松缓解此问题。