首先:我不是在谈论每个执行的位置,而是浏览器协议的不同之处在于从服务器获取脚本(或者,我真的不知道)。
我看到一个非常奇怪的行为,我无法解释,在互联网上搜索了几天后我找不到原因。
情况如下:我有一些最初存储在 .php 文件中的 javscript,因为在获取脚本时需要执行一些服务器端魔法。浏览器这样调用它:
<script language="JavaScript" type="text/javascript" src="http://myserver.com/script.php"></script>
javascript 本身在加载时会进行一些 AJAX 调用。在由 AJAX 调用激活的 (PHP) 脚本中,我有一个计数器来跟踪流量。
现在在某个时候,script.php 完成的 php 魔法被删除了,我能够简单地将 .php 文件转换为 .js ,如下所示:
<script language="JavaScript" type="text/javascript" src="http://myserver.com/script.js"></script>
它具有完全相同的输出,并进行完全相同的 AJAX 调用。
这是奇怪的部分:使用 script.js,我的计数器说有 1/10 的流量来自 script.php。我不知道为什么会这样......
我检查了服务器的 access.log,确实,script.js 收到的请求比 script.php 少得多。当我恢复到 script.php 时,流量立即增加到 10/10。
我在调试中遇到的主要问题是我无法重现未加载的脚本。我总是在让脚本加载/执行的那 10% 中。
我试图不让 script.js 缓存,但这没有帮助。我还尝试观察这种行为是否与浏览器无关,但对我来说,它适用于 FF、Chrome 和 IE。此外,访问日志中的用户代理字符串对于判断它实际上是哪个浏览器并不是很有帮助。
如果有人能对此有所启发,我将非常感激。
[编辑] 即使 js 脚本来自缓存,这很好,因为它节省了我大量的流量,它不应该仍然执行并进行 AJAX 调用吗?这也不会发生(因此只有 1/10 的流量,如计数器所示)
[EDIT2] 我刚刚注意到 script.php 有 Content-Type: application/javascript 而 script.js 有 Content-Type: application/x-javascript 现在我不知道这是否可能导致这种行为,但我'我会尝试改变它。更改它,并更改 script.js 以及换行符,因此它需要刷新并没有帮助......