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

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

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

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

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

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

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

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

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

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

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

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

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

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

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

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

Попробуйте

Выберите валюту для отображения денежных единиц