Добрый день!
Я перешел с 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.Deferred исключение: приложение не определено. ReferenceError: приложение не определено в HTMLDocument.(http://localhost:53228/:12:35) at mightThrow (http://localhost:53228/Scripts/jquery-3.3.1.js:3534:29) в процессе (http://localhost:53228/Scripts/jquery-3.3.1.js:3602:12) undefined
Uncaught ReferenceError: Приложение не определено в HTMLDocument. ((Index): 12) вmightThrow (jquery-3.3.1.js: 3534) в процессе (jquery-3.3.1.js: 3602)
Оказывается, что содержимое $ (function () {
было вызвано до приложения.js-скрипт был загружен, и статус document.readyState
был «интерактивным».
Но если вы не используете «defer» при импорте jquery:
<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 - см. консоль).
Есть мысли?