网页中的AngularJS缓存问题

时间:2016-01-07 05:58:48

标签: html angularjs

我有一个Spring AngularJS Web应用程序,我从Spring控制器获取JSON数据,并在角度工厂中使用$ http方法使用此数据,并为此编写必要的角度控制器。我使用html文件来显示这些数据。我在html页面中动态获取表单字段名称和字段类型。我的问题是,当我最初登录并转到相应的页面时,我得到的似乎是缓存问题。参数显示为来自html页面。只有在我刷新页面后才能获得正确的数据。任何人都可以帮我弄清楚发生了什么事吗?

2 个答案:

答案 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-ControlPragmaExpires标头。既然你在服务器上使用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可以选择在调试控制台打开时禁用缓存,因此可以轻松缓解此问题。