TypeError: (intermediate value)

8 августа 2018 г. 22: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>
Для тех, кто не знаком с Django: {% addtoblock "js" %} - добавляет скрипт в список скриптов, а {% render_block 'js' postprocessor 'compressor.contrib.sekizai.compress' %} - выводит их, объединяя в один файл и минимизируя.

Меня подвело то, что в javascript можно и не закрывать какую-либо команду точкой с запятой в некоторых случаях. Так например, если у нас просто объявлена некоторая переменная, окружённая тегом <script>. Но, так как у меня на сервере происходит сборка скриптов в один файл (библиотекой django-compressor), то моя переменная соединилась с другим кодом js, а разделения точки с запятой не оказалось, отсюда и возникала ошибка.

 

Ошибки, локально невоспроизводимые, трудно решаемы - в чём я ещё раз убедился :)

Оцените статью

0 из 5 (всего 0 оценок)

Поля, отмеченные звёздочкой ( * ) , являются обязательными.

Спасибо за ваш отзыв!

Автор статьи

Права на использование материала, расположенного на этой странице http://vivazzi.ru/it/typeerror-intermediate-value/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Мальцев Артём
Ссылка на статью: <a href="http://vivazzi.ru/it/typeerror-intermediate-value/">http://vivazzi.ru/it/typeerror-intermediate-value/</a>

Подробнее: Правила использования сайта

Комментариев: 0

Вы можете оставить комментарий как незарегистрированный пользователь. Но, зарегистрировавшись, вы сможете получать оповещения об ответах, а также иметь доступ к своему личному аккаунту для просмотра своих комментариев.

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте