2

在 Struts 2 jQuery 插件项目中,考虑一个简单的 JSP 页面,其中包含一个 JS 文件

<script type="text/javascript"
    src="js/sample.js"></script>

当您查看实际请求的 URL(例如使用 Firefox firebug)时,您会看到 URL 末尾添加了一个 13 位的下划线:

localhost:8080/js/sample.js?_=1402322518885

当您刷新页面时,它看起来像

localhost:8080/js/sample.js?_=1402322518886
localhost:8080/js/sample.js?_=1402322518887
localhost:8080/js/sample.js?_=1402322518888

您可以通过访问http://struts.jgeppert.com/struts2-jquery-showcase/index.action看到这一点。打开萤火虫网络控制然后转到widgets/spinner菜单,你可以看到globalize.js将被称为类似globalize.js?_=1402323154341

这可以防止 JS 缓存在客户端上。你知道这是什么吗?我们该如何预防?!我发现这不适用于所有 JS 文件,据我发现如果您的 Ajax 加载的内容中包含 JS 函数,它将用下划线加数字调用

4

2 回答 2

1

那是一个 Unix 时间戳(代表今天 16:01 GMT+2)。

它是由底层jQuery.ajax(不是 by Struts2-jQuery-plugin)添加的,以防止浏览器缓存文件(我猜是为了处理 IE 缓存),无论是在以下情况下:

  1. 你已经设置cache: false;
  2. dataType 的类型是script(如您的情况)或jsonp

来自官方文档

缓存(默认值:true, falsefordataType 'script''jsonp'

类型:布尔值

如果设置为false,它将强制浏览器不缓存请求的页面。注意:设置cachefalse仅适用于 HEAD 和 GET 请求。它通过附加"_={timestamp}"到 GET 参数来工作。其他类型的请求不需要该参数,除非在 IE8 中对已由 GET 请求的 URL 进行 POST。

解决方案:通过 jQuery ajax forcing 加载文件cache: true,或者不使用 jQuery 加载文件。

于 2014-06-09T15:00:53.330 回答
1

Struts2 jQuery 插件使用 jQuery,此功能与 jQuery 中不缓存页面有关。ajaxcache该插件可配置为通过head标签的属性更改此功能。从文档

Name        ajaxcache       
Required    false       
Default     false       
Evaluated   false       
Type        Boolean     
Description If set to false it will force the pages that you request to not be 
            cached by the browser. 

使用下面的代码index.jsp将更改不缓存默认值

<s:if test="%{theme == 'showcase' || theme == null}">
    <sj:head debug="true" compressed="true" jquerytheme="showcase" customBasepath="themes" loadFromGoogle="%{google}" ajaxhistory="%{ajaxhistory}" defaultIndicator="myDefaultIndicator" defaultLoadingText="Please wait ..." ajaxcache="true"/>
</s:if>
<s:else>
    <sj:head debug="true" compressed="true" jquerytheme="%{theme}" loadFromGoogle="%{google}" ajaxhistory="%{ajaxhistory}" defaultIndicator="myDefaultIndicator" defaultLoadingText="Please wait ..." ajaxcache="true"/>
</s:else>
于 2014-06-09T17:00:05.043 回答