JQuery 3 готовая функция не работает правильно - PullRequest
0 голосов
/ 26 сентября 2018

Добрый день!

Я перешел с 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 - см. консоль).

Есть мысли?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Да, это проблема jquery.Вам нужно использовать document.AddEventListener("DOMContentLoaded", function() {...}); или исправить библиотеку jquery.Вы можете увидеть обсуждение этой проблемы здесь: https://github.com/jquery/jquery/issues/3271

0 голосов
/ 26 сентября 2018

Попробуйте это.

Я переупорядочил сценарии, удалил атрибуты defer и onload и добавил строку для вызова onJqueryLoad, когда jQuery завершит инициализацию.

<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>
...