如何强制 jQuery 先加载?
How do I force jQuery to load first?
我正在尝试将 bootstrap-select 添加到我的 Flask 应用程序中,但我将 运行 保留在错误 "TypeError: $(...).selectpicker is not a function" 中。我读过的所有内容都说只有在加载 bootstrap-select.js 后再次加载 jQuery 时才会发生这种情况,所以我检查并清理了我的脚本,确保 jQuery 是在我所有其他 JS 脚本之前加载,如下所示:
<script src="http://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"> </script>
...
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js"></script>
但是,我仍然遇到同样的问题。我决定查看 chrome 开发人员工具 window 中的加载顺序,现在我认为我的问题是:jQuery 正在 排队 用于在 bootstrap-select 之前加载,但实际上 开始 下载直到 bootstrap-select 已经完成完成的。我怀疑这是因为两者之间的大小不同。
有什么方法可以强制我的其他脚本延迟加载,直到 jQuery 已经加载?或者,如果我弄清楚如何在我的静态目录中缓存 jQuery 的副本,那会有帮助吗?
编辑:哇,好的,我收到了很多评论!为了尽可能多地澄清,我只是做一些笔记:
- 彻底检查我所有的脚本后,我可以确认只有一份 jQuery 正在加载。
- 这不是 https 页面,我 运行 它位于本地 Flask 开发服务器上。
- 我检查了我代码中的 bootstrap-select url,它是正确的。抱歉,我不确定为什么在复制粘贴时遗漏了破折号。我已经相应地更正了问题。
- 我一直在使用 chrome 的开发工具中的网络选项卡来检查加载 successes/times。
- 我将 jQuery 移动到文件的最开头以确保它首先加载,现在我可以确认它在 bootstrap-select 加载之前完成加载。
尽管如此,我仍然会遇到同样的错误,所以如果有人有其他建议,我将不胜感激。在这一点上我完全没有想法。
尝试将 bootstrap select 库的 URL 更改为:
https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js
你应该把 defer
放在两个脚本标签的末尾,这样无论如何它们都会按顺序加载,就像这样:
<script src="http://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous" defer></script>
...
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrapselect/1.13.1/js/bootstrap-select.min.js" defer></script>
我有解决方案,但它非常愚蠢。
我将我的脚本添加到以前的开发人员添加他们的脚本的相同位置,在我所有其他模板扩展的基本模板中。问题是,他们在 body 标签关闭后将其添加到页面末尾(大概是为了加快页面加载速度)。使用 selectpicker 的 jQuery 的一小部分是 在 正文中,因此试图过早地加载函数。
感谢您的所有回答!
我正在尝试将 bootstrap-select 添加到我的 Flask 应用程序中,但我将 运行 保留在错误 "TypeError: $(...).selectpicker is not a function" 中。我读过的所有内容都说只有在加载 bootstrap-select.js 后再次加载 jQuery 时才会发生这种情况,所以我检查并清理了我的脚本,确保 jQuery 是在我所有其他 JS 脚本之前加载,如下所示:
<script src="http://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"> </script>
...
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js"></script>
但是,我仍然遇到同样的问题。我决定查看 chrome 开发人员工具 window 中的加载顺序,现在我认为我的问题是:jQuery 正在 排队 用于在 bootstrap-select 之前加载,但实际上 开始 下载直到 bootstrap-select 已经完成完成的。我怀疑这是因为两者之间的大小不同。
有什么方法可以强制我的其他脚本延迟加载,直到 jQuery 已经加载?或者,如果我弄清楚如何在我的静态目录中缓存 jQuery 的副本,那会有帮助吗?
编辑:哇,好的,我收到了很多评论!为了尽可能多地澄清,我只是做一些笔记:
- 彻底检查我所有的脚本后,我可以确认只有一份 jQuery 正在加载。
- 这不是 https 页面,我 运行 它位于本地 Flask 开发服务器上。
- 我检查了我代码中的 bootstrap-select url,它是正确的。抱歉,我不确定为什么在复制粘贴时遗漏了破折号。我已经相应地更正了问题。
- 我一直在使用 chrome 的开发工具中的网络选项卡来检查加载 successes/times。
- 我将 jQuery 移动到文件的最开头以确保它首先加载,现在我可以确认它在 bootstrap-select 加载之前完成加载。
尽管如此,我仍然会遇到同样的错误,所以如果有人有其他建议,我将不胜感激。在这一点上我完全没有想法。
尝试将 bootstrap select 库的 URL 更改为:
https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js
你应该把 defer
放在两个脚本标签的末尾,这样无论如何它们都会按顺序加载,就像这样:
<script src="http://code.jquery.com/jquery-1.12.4.min.js" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous" defer></script>
...
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrapselect/1.13.1/js/bootstrap-select.min.js" defer></script>
我有解决方案,但它非常愚蠢。
我将我的脚本添加到以前的开发人员添加他们的脚本的相同位置,在我所有其他模板扩展的基本模板中。问题是,他们在 body 标签关闭后将其添加到页面末尾(大概是为了加快页面加载速度)。使用 selectpicker 的 jQuery 的一小部分是 在 正文中,因此试图过早地加载函数。
感谢您的所有回答!