TypeError: (intermediate value)
9 августа 2018 г. 2:56
Неожиданным образом может вылезти ошибка javascript:
TypeError: (intermediate value)
Как оказалось одна из причин - просто не поставлена точка с запятой после объявления переменной, например:
form_uploader_ru: var form_uploader_lang = { sending: 'Отправка...', file_sending: 'Отправка файла...', send: 'Отправить' }; <--- Обязательно нужно поставить знак ";"
Попробуйте проверить, все ли ваши переменные закрываются точкой с запятой (";").
Как эта ошибка возникла в моём коде?
Вроде бы ошибка-то не сложная с элементарным решением, но я на самом деле долго искал причину этой ошибки, поэтому сей пост здесь и опубликован.
Меня сбило то, что локально всё замечательно работало, а на сервере возникала ошибка. Потом уже путём поочерёдного исключения, подключаемых скриптов, я получил работающий код. И меня удивило, что при подключении очень простого скрипта у меня ломалось выполнение js-кода.
Я наглядно покажу, как это произошло у меня:
base.html: ... {% addtoblock "js" %}{% include 'form_uploader_lang.html' %}{% endaddtoblock %} {% addtoblock 'js' %}<script src="{{ STATIC_URL }}sb_core/js/form_uploader.js"></script>{% endaddtoblock %} ... {% render_block 'js' postprocessor 'compressor.contrib.sekizai.compress' %} form_uploader_lang.html: {% load i18n %} <script> var form_uploader_lang = { sending: '{% trans 'Sending...' %}', file_sending: '{% trans 'Sending of file...' %}', send: '{% trans 'Send' %}' } <--- Здесь-то мне и нужно было поставить знак ";" </script>
{% addtoblock "js" %}
- добавляет скрипт в список скриптов, а {% render_block 'js' postprocessor 'compressor.contrib.sekizai.compress' %}
- выводит их, объединяя в один файл и минимизируя.Меня подвело то, что в javascript можно и не закрывать какую-либо команду точкой с запятой в некоторых случаях. Так например, если у нас просто объявлена некоторая переменная, окружённая тегом <script>
. Но, так как у меня на сервере происходит сборка скриптов в один файл (библиотекой django-compressor
), то моя переменная соединилась с другим кодом js, а разделения точки с запятой не оказалось, отсюда и возникала ошибка.
Ошибки, локально невоспроизводимые, трудно решаемы - в чём я ещё раз убедился :)
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0