【问题标题】:How to stop reloading of Javascript如何停止重新加载 Javascript
【发布时间】:2014-07-18 14:55:35
【问题描述】:

由于 Tiles,我遇到了重新加载 Javascript 的问题。

Tiles-definition.xml

<tiles-definitions>
         <definition name="template-main" template="/WEB-INF/jsp/home.jsp">
              <put-attribute name="header-main-content" value="/WEB-INF/jsp/header_main.jsp"/>  
              <put-attribute name="header-quote-content" value="/WEB-INF/jsp/header_quote.jsp" />
              <put-attribute name="menu-content" value="/WEB-INF/jsp/menu.jsp" />
              <put-attribute name="body-content" value="/WEB-INF/jsp/slides.jsp" />
              <put-attribute name="footer-content" value="/WEB-INF/jsp/footer.jsp" />
         </definition>

         <definition name="template-main-login" extends="template-main">
              <put-attribute name="header-main-content" value="/WEB-INF/jsp/header_main.jsp" />
         </definition> 
</tiles-definitions>

home.jsp

<body style="background-color: #5F9EA0">

    <head>
        <script src="<c:url value="/resources/js/jquery-1.11.1.js" />"></script>
        <script src="<c:url value="/resources/js/example.js" />"></script>

        bla bla .. 

example.js

$(document).ready(function() {
    setTimeout(function () {
        popUp('show');
    }, 1000);

});

我正在使用 Spring-MVC:

加载应用程序时,我将视图返回为 template-main。所以第一个模板定义被调用,应用程序打开时会弹出一个登录弹出窗口,因为我在文档加载时调用弹出窗口。

问题:

现在,当我提供登录凭据并提交时,我正在调用 template-main-login,这反过来又扩展了 template-main。现在的问题是,我包含在 home.jsp 中的 Javascript 正在再次加载(可能是因为我正在扩展模板主布局),这样我第二次打开了我想要停止的弹出窗口。

所以请告诉我如何停止弹出窗口再次打开。

【问题讨论】:

  • 你在 JS 文件的缓存头中指定了什么?它现在在浏览器工具中显示什么?
  • 如果使用 varnish/nginx 甚至 tomcat,您可以为这些静态文件指定标头,以便它们在浏览器中缓存(在持续时间内或通过 ETags - etags 将查询服务器以查看是否文件哈希是否仍然有效)。
  • @alihaider 我没有使用任何缓存头......它只是一个普通的 js 文件。是的,我正在使用 Tomcat。

标签: javascript jquery spring jsp tiles


【解决方案1】:

我建议不要将 home.jsp 作为您的模板,而是只为您的模板创建一个单独的 jsp,而 basetemplate 将具有通用的东西,例如加载外部 js 和 css 文件并将特定的 js 代码保留在特定的 jsp 中

【讨论】:

  • 那么我的js会包含在哪里呢?即使我在基本模板中包含我的 js,我仍然必须扩展基本模板 rt?
  • 我想说的是因为您的弹出代码特定于您的 home.jsp,所以只在该 jsp 中编写该部分,以便它不会出现在任何其他 jsp 中,因此没有效果跨度>
  • 好的,让我试试看.. +1 的建议。
【解决方案2】:

您需要确保您的 JS 文件具有正确的缓存控制/过期标头(设置较长的日期或使用 ETags)。如果您使用 ETags,静态文件仍将查询服务器实现以检查文件哈希是否已更改。您可以通过在所有静态文件上使用 expires 标头来避免这种情况,以便浏览器可以缓存它们并从本地计算设备加载它们,而不是向您的服务器发送 HTTP 请求。

【讨论】:

    猜你喜欢
    • 2014-07-21
    • 2019-12-20
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多