下午好!
我从jquery 1.11.1移到了jquery 3.3.1。我在页面上有以下代码: ...
<script type="text/javascript">
function onJqueryLoad() {
$(function () {
console.log(document.readyState);
window.app = new App({logsUrl: '3434'});
});
}
</script>
<script type="text/javascript" src="~/Scripts/jquery-3.3.1.js" defer onload="onJqueryLoad()"></script>
...
// more scripts
...
<script type="text/javascript" src="~/Scripts/Common/App.js" defer></script>
... 在控制台中,我看到以下错误:
互动
jquery-3.3.1.js:3818 jQuery。延迟的例外:未定义应用 ReferenceError:未定义应用 在HTMLDocument。 (http://localhost:53228/:12:35) atmaythrow(http://localhost:53228/Scripts/jquery-3.3.1.js:3534:29) 处理中(http://localhost:53228/Scripts/jquery-3.3.1.js:3602:12)未定义
未捕获的ReferenceError:未定义应用 在HTMLDocument。 ((索引):12) atmaythrow(jquery-3.3.1.js:3534) 进行中(jquery-3.3.1.js:3602)
事实证明,$ (function () {
的内容是在加载App.js脚本之前被调用的,并且document.readyState
的状态为“交互式”。
但是,如果您在导入jquery时不使用“ defer”:
<script type="text/javascript" src="~/Scripts/jquery-3.3.1.js" onload="onJqueryLoad()"></script>
然后控制台将显示为状态:“完成”,并且不会出现任何问题。
状态document.readyState
互动(https://developer.mozilla.org/en-US/docs/Web/API/Document/readyState)的描述:
文档已完成加载,并且已对文档进行了解析, 但是子资源,例如图像,样式表和框架仍然 正在加载。
我无法找到有关状态“交互”是否表示所有脚本都已加载的详细信息。
我在chrome和firefox的最新版本中进行了检查,但是在Microsoft Edge中没有问题。
在早期版本的jquery 1.11.1中,没有此类错误。
https://jsfiddle.net/uez1y7ft/4/-如果在没有现金的情况下使用,该错误会不时出现(ctrl + f5-请参阅控制台)。
有什么想法吗?
答案 0 :(得分:0)
是的,这是jquery的问题。您需要使用document.AddEventListener("DOMContentLoaded", function() {...});
或修复jquery库。您可以在这里查看有关此问题的讨论:https://github.com/jquery/jquery/issues/3271
答案 1 :(得分:-1)
尝试一下。
我已经对脚本重新排序,删除了defer
和onload
属性,并添加了一行以在jQuery完成初始化后调用onJqueryLoad。
<script type="text/javascript" src="~/Scripts/jquery-3.3.1.js"></script>
<script type="text/javascript" src="~/Scripts/Common/App.js"></script>
<script data-worldcore>
function onJqueryLoad() {
console.log(document.readyState);
window.app = new App({logsUrl: '3434'});
}
$(function(){ onJqueryLoad(); } );
</script>