这会发生什么时候?

时间:2010-01-06 06:03:39

标签: html scripting

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

我第一次访问该页面时,未访问test.php,

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

你有没有经历过这个?

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

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

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

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

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

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

答案 2 :(得分:2)

当缓存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
?>

答案 3 :(得分:2)

缓存可能会导致呼叫中断。您可以通过在路径中附加不断变化的字符串来强制执行每次访问:

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

答案 4 :(得分:2)

看起来您的脚本未在页面加载时注册,是否在Head标记内?

答案 5 :(得分:0)

你怎么知道没有去过?

你是否认为它,因为它内部的一些代码没有执行?

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

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

只是一个不同的想法;)

PS。你有任何Javascript错误吗?