我正在构建一个网页,其中包含链接到该网站的 jQuery。 问题是,由于某种原因 jQuery 正在尝试加载我的脚本。
这是我的代码:
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Inloggen | Andalusier Vereniging</title>
<link rel="stylesheet" href="../css/prefixes.css" media="screen">
<link rel="stylesheet" href="../css/loginstyle.min.css" media="screen">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<!-- <script src="../js/assets/checks.js" charset="utf-8"></script> -->
<script src="lksdfj" type="text/javascript"></script>
</head>
<body>
</body>
</html>
编辑: 好吧,我刚刚意识到第二个 CSS 文件中的字体链接 (@import) 正在执行此操作。如果我删除它,它会停止执行两次。还有其他想法吗?
最终编辑: 谢谢大家帮我澄清这个问题。总结一下:有些浏览器倾向于重新检查是否找到文件,但它绝不会执行该文件两次。
那么..这是怎么回事,我应该担心这个吗?
非常感谢能为我提供良好答案的人!
最佳答案
这不是 2 次文件加载(我的意思是 jQuery 不会尝试第二次运行该文件),它是同样的错误 2 次。
浏览器打开许多与服务器的 TCP 连接并提取页面呈现所需的文件。因此浏览器在需要运行文件之前就知道文件丢失了。
这就是我的观点。让我们有 2 个现有文件,“xm.html”和“exist.js”(来自 xmmmm 的 xm :P) 和一个不存在的文件,我们将其称为“dont_exist.js”。
所以“xm.html”代码是:
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="UTF-8">
<title>Test Html</title>
<script type="text/javascript">console.log('Execute code 1');</script>
<script src="exist.js" type="text/javascript"></script>
<script type="text/javascript">console.log('Execute code 3');</script>
<script src="dont_exist.js" type="text/javascript"></script>
<script type="text/javascript">console.log('Execute code 5');</script>
</head>
<body>
</body>
</html>
“exist.js”的代码是
console.log('Execute code 2');
所以我的 chrome 的输出是:
错误发生在文件的js代码将被执行的位置。
但是 Firefox 有时会输出以下内容:
因此,第一个错误是找不到文件的 404 错误,但由于 Firefox 稍后尝试以正确的顺序运行该文件,因此我认为会打印相同的消息以进行调试。
编辑 让我再解释一下。 这取决于浏览器如何处理文件,
jQuery 不在您的服务器上,因此浏览器需要 2 个或更多 tcp 连接来加载文件,通过 tcp 连接,浏览器可以顺序发出许多 http 请求。
因此,浏览器尝试通过预加载而不是运行它们来尽可能快地获取所需的文件。
当其他文件等待时,jQuery 文件可能需要更多时间下载。
因此,当他找不到文件时,会出现 404 错误,但是,如果认为该文件未预加载,他可能会尝试再次加载该文件(如果 tcp 连接仍在运行,则不会产生任何费用)。
浏览器在任何情况下都不会运行该文件两次。
关于javascript - 为什么 jQuery 试图加载我的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39848946/