javascript - 如何确保外部 JS 代码作为第一个加载

标签 javascript jquery html

我有一个网站,它在外部 JS 文件中使用大型 JS 数据存储。 问题是我的网站有时可以运行,有时则不能:/

源代码基本上如下所示:

<!DOCTYPE html>
<html>
<head>
    <title>Example</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script type="text/javascript" src="data.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
// All HTML code is here //
    <script type="text/javascript">
    document.addEventListener("DOMContentLoaded", function(event) { 
//Another JS code to display data
}
</script>   
</body>
</html>

可能是数据文件“data.js”太大,有时加载速度很慢,并且在该数据之前加载了另一个代码。 我认为有时在运行网站后一切都会完美,但有时我在控制台中出现错误,例如“元素后缺少 ] 或“variable1FromDataJS 未定义”,但我确信在此代码中一切都是正确的! 我如何确定我的外部文件 data.js 将作为第一个加载? (在 JS 代码中,我使用 document.addEventListener("DOMContentLoaded", function(event) { }

或者您认为问题的原因有所不同?

最佳答案

"missing ] after element""variable1FromDataJS is not defined"表明您存在脚本错误,导致部分 Javascript 中止执行,因此某些变量和数据未按您的预期定义。

您需要查找并修复这些脚本错误,并且仅当您拥有完全清晰的控制台且未报告任何错误时才能继续。控制台中的所有错误都应该得到充分理解并修复。

现在您已经让我们查看了实际站点,当我查看 Chrome 浏览器中的“网络”选项卡时,我看到 data.js 的下载。 Chrome 中的文件有时会失败并出现此错误 net::ERR_CONTENT_LENGTH_MISMATCH 。它完成了部分或大部分下载,但未成功完成。根据具体失败的位置,您会收到不同的脚本错误。我看不出为什么这会是客户端错误。我认为您的服务器提供 data.js 的方式有问题。我不知道它是否未正确完成请求,或者您的服务器中是否存在并发问题,或者创建 data.js 时是否存在编程错误,但我认为您需要在服务器上修复此问题。

失败时我在 Chrome 日志中看到以下内容:

GET http://maps.890m.com/data.js net::ERR_CONTENT_LENGTH_MISMATCH
<小时/>

<script>页面原始 HTML 中且未标有 defer 的元素或async属性将按照它们在网页中遇到的顺序执行。第二个<script>在第一个标签加载并执行之前,标签不会执行。如果第一个脚本在解析或执行时抛出异常,那么它将被中止,并且行中的下一个脚本将在准备好时执行。但是,由于第一个脚本中止,您期望第一个脚本执行的操作将不会完成。

但是,这种顺序执行脚本标签的结果是,如果 data.js 很大,您不必担心时间问题。它仍然会在任何 <script> 之前加载并执行。执行后出现的标签。

关于javascript - 如何确保外部 JS 代码作为第一个加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28685097/

相关文章:

javascript - 下面的代码使用了lastIndexOf方法。为什么代码到达位置 = 0 后,就开始无限打印?

javascript - 如何缩放 d3.js 图表并以更大的粒度重新加载数据(在 AJAX 中)

javascript - 使用 Chrome 扩展访问/操作实际 DOM

jquery - textarea 占用太多高度

javascript - 从 contentEditable div 获取最后输入的单词

javascript - 无法触发仅一部分 javascript 的刷新

javascript - 检测类/td/div 中的数字范围(更改 css)-jQuery?

javascript - 仅在内容更新时自动刷新网页

PHP 在一行中输出所有表格

javascript - navigationControl、mapTypeControl 和 scaleControl 位于 map 后面