【问题标题】:When will this happen?这什么时候会发生?
【发布时间】:2011-01-01 22:40:09
【问题描述】:
<script type="text/javascript" src="test.php"></script>

第一次访问那个页面,test.php没有被访问,

但是如果我刷新页面,它就会运行。

你有过这样的经历吗?

【问题讨论】:

    标签: html scripting


    【解决方案1】:

    test.php在本地或远程缓存时会发生。

    【讨论】:

    • 如果是这样的话,test.php不应该是第一次访问,刷新时也不应该访问?
    • 它会从您上次刷新的时间开始缓存。
    • 没错,但问题是它在第一次期间没有加载,那么它怎么能被缓存呢?
    • 我猜他没有考虑到其他会话可能会为他缓存它。
    【解决方案2】:

    正如 Tor 和 Silky 所说,这很可能是由于页面被缓存造成的。如果您安装了 Firebug,当您转到该页面时打开“Net”选项卡,您可能会看到它显示“304 Not Modified”——这意味着它已被缓存。

    停止缓存文件的最简单和最可靠的方法(根据我的经验)是向其添加随机查询字符串:

    <script type="text/javascript" src="test.php?_=46031535"></script>
    

    您只需在每次页面加载时更改它(在服务器端或客户端)。

    当然,如果缓存头在服务器上设置正确,那么这应该不是问题,但我一直发现这种方法更容易。

    【讨论】:

    • 接下去;将文件的修订号放在上面实际上很好(如果您的系统支持它)(这样做;我通过一些构建脚本自动完成,用于我的静态文件)。这样,相同的版本总是被缓存,但新版本会立即重新下载。
    【解决方案3】:

    test.php 文件被缓存时,可能会发生这种情况——它可以在浏览器的缓存中,也可以通过一些代理。


    禁止缓存 test.php 可能会有所帮助;这可以通过发送正确的 HTTP 标头来完成——引用 header 手册页中的示例:

    PHP 脚本经常生成动态的 不能被缓存的内容 客户端浏览器或任何代理缓存 服务器和客户端之间 浏览器。许多代理和客户可以 强制禁用缓存:

    <?php
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
    ?>
    

    【讨论】:

      【解决方案4】:

      缓存可能导致调用中断。您可以通过在路径中附加一个不断变化的字符串来强制调用它:

      <script type="text/javascript" src="test.php?u=<?php print time(); ?>"></script>
      

      【讨论】:

        【解决方案5】:

        看起来您的脚本没有在页面加载时注册,它在 Head 标记内吗?

        【讨论】:

          【解决方案6】:

          你怎么知道它没有被访问过?

          你认为它是因为它里面的一些代码没有执行吗?

          如果是这种情况,可能是您正在访问页面的 DOM,而页面尚未完全加载..(因此 javascript 失败)

          但是第二次(以及之后)页面的 html 被缓存了,所以当脚本尝试访问 DOM 时,它已经存在并且代码可以工作..

          只是一个不同的想法;)

          ps。你有任何 Javascript 错误吗?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-21
            • 2011-05-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-03
            相关资源
            最近更新 更多