Ostrova

Ostrova

+1
Репутация
22
Рейтинг
#1 И снова рубрика "помогите починить" 16 марта 2025 в 21:15

Что ж, интересная развязка истории. Раз уж вариантов решения не поступало, решил сформулировать вопрос правильно и задать его DeepSeek. Вот его внутренние размышления, а далее ответ:

Хорошо, давайте разберемся с проблемой. Пользователь обновил InstantCMS до версии 2.17, и теперь при нажатии на кнопку в компоненте Upjump возникает ошибка `Uncaught SyntaxError: "[object Object]" is not valid JSON` в файле `upjump.js`. Нужно понять, почему это происходит именно после обновления CMS.

Первым делом смотрю на предоставленный код `upjump.js`. Ошибка возникает при попытке парсить JSON из ответа сервера. В нескольких местах используется `$.parseJSON(response)` или `JSON.parse(response)`. В новой версии InstantCMS, возможно, изменился формат ответов сервера или способ отправки данных.

Замечаю, что в функции `loadForm` есть строка `result = $.parseJSON(response);`. Если сервер возвращает уже объект JSON, а не строку, попытка парсить его вызовет ошибку. Но раньше, возможно, ответ приходил в виде строки, а теперь приходит объект, из-за чего парсинг не нужен. Это частая проблема при обновлении библиотек или CMS, где методы обработки AJAX могут автоматически парсить JSON, если заголовок ответа правильный.

Также в других функциях, например, `upjumpBuy` и `calculate`, используется аналогичный подход. Если в InstantCMS 2.17 jQuery настроен на автоматическое распознавание JSON (через `dataType: 'json'`), то `response` уже будет объектом, и попытка его парсить вызовет ошибку.

Проверяю, есть ли в AJAX-запросах указание `dataType: 'json'`. В функции `calculate` и `upjumpBuy` используется `$.ajax` без указания `dataType`, поэтому jQuery пытается сам определить тип ответа. Если сервер теперь отправляет правильный заголовок `Content-Type: application/json`, jQuery автоматически парсит ответ в объект, и последующий `$.parseJSON` будет пытаться парсить объект, что приводит к ошибке.

Еще один момент: в InstantCMS 2.17 могли обновить версию jQuery. Если раньше использовалась версия, где `$.post` не парсил JSON автоматически, а теперь используется версия с другим поведением, это может вызвать проблему. Например, если в ответе сервера отсутствует заголовок, указывающий на JSON, jQuery раньше возвращал строку, а теперь может пытаться парсить ее как JSON, если `dataType` не указан явно.

Также стоит обратить внимание на функцию `upjumpUpdElems`, которая использует `fetch` и `DOMParser`. Возможно, изменения в безопасности или политиках CORS в новой версии браузеров или CMS мешают корректной работе этой функции, но это менее вероятно связано с JSON-ошибкой.

Итак, основная проблема, скорее всего, в том, что ответ от сервера теперь приходит уже в виде JSON-объекта, а код компонента пытается его повторно парсить. Нужно убрать вызовы `$.parseJSON` там, где это не требуется, и убедиться, что AJAX-запросы правильно обрабатывают тип данных.

и ответ

Ошибка Uncaught SyntaxError: "[object Object]" is not valid JSON возникает из-за попытки парсить объект как JSON-строку. Скорее всего, в новой версии InstantCMS 2.17 изменился формат ответов сервера или обновились зависимости (например, jQuery), что привело к конфликту с кодом компонента Upjump. Давайте разберемся детально.

 
Основная проблема
В коде upjump.js есть несколько мест, где используется $.parseJSON(response) или неявный парсинг JSON. Однако, если сервер уже возвращает готовый JavaScript-объект (а не строку), эти вызовы становятся избыточными и вызывают ошибку. Вероятно, в InstantCMS 2.17:

Ответы сервера теперь автоматически парсятся в объект (например, из-за правильного заголовка Content-Type: application/json).
jQuery или InstantCMS изменили обработку AJAX-ответов.
 
Конкретные места в коде
Функция loadForm:

javascript
Copy
$.post(...).done(function(response) {
    result = $.parseJSON(response); // Ошибка здесь, если response уже объект
});
Если response — это объект (не строка), $.parseJSON попытается вызвать JSON.parse("[object Object]"), что и вызывает ошибку.
Функции upjumpBuy, calculate, upjumpFree:
Аналогичная проблема с $.parseJSON(response).
 
Почему проявилось в InstantCMS 2.17?
Изменения в ядре CMS: В новой версии InstantCMS могла появиться автоматическая обработка JSON-ответов (например, через хедер Content-Type), из-за чего response перестал быть строкой.
Обновление jQuery: Если InstantCMS 2.17 использует новую версию jQuery, метод $.post() мог начать автоматически парсить JSON при наличии правильного заголовка.
Изменения в API: Серверный компонент /upjump/… мог начать возвращать данные в другом формате.
 
Решение
Убрать лишний $.parseJSON:
Если сервер возвращает уже распарсенный объект, замените:

result = $.parseJSON(response);

result = response; // Если response уже объект

Ну и далее много всего, но мне хватило этой информации. В общем заменил в Upjump.js

result = $.parseJSON(response);
на:

result = response; // Если response уже объект

Все заработало. Спасибо ИИ. 

#2 И снова рубрика "помогите починить" 15 марта 2025 в 17:01
 Ostrova, у автора было 7 пятниц на неделе, в итоге он всё бросил видимо. без компонента Вам не помогут, возможно и с компонентом не помогут, но стоит попробовать
Александр

Я готов предоставить компонент, если Fuze позволит. 

#3 И снова рубрика "помогите починить" 15 марта 2025 в 14:07
Что это за компонент такой, 0 рубликов но «Купить»? Сложно сказать не имея его.
pupsik

Долгая история. Автор устроил складчину на выкуп компонентов, она не состоялась, участникам рассылали компонент на выбор. Потом закрыл продажи. 

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

#1 И снова рубрика "помогите починить" 15 марта 2025 в 00:47

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

Есть купленный компонент UpJump — продвижение записей. После обновления на 2.17 перестал работать (автор удалился с форума, к нему вопросов нет, поскольку компонент шел «как есть», без поддержки). Так вот, после нажатия на кнопку «продвижение» кнопка просто зависает и модалка с опциями продвижения не открывается. В консоли браузера в этот момент выдает ошибку:

Uncaught TypeError: $.parse is not a function
    at Object.<anonymous> (upjump.js?1660154113:4:20)
    at c (jquery.js?1660154113:2:25266)
    at Object.fireWith [as resolveWith] (jquery.js?1660154113:2:26015)
    at l (jquery.js?1660154113:2:77721)
    at XMLHttpRequest.<anonymous> (jquery.js?1660154113:2:80204)

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

#5 Ошибка 503 при подтверждении регистрации 7 марта 2025 в 17:02
Это долгий и нудный путь. Если вы упдате делать не собираетесь, то вам лутше проверить на чистой 2.16.3 а не на 2.17. И если на чистой 2.16.3 с теми же параметрами что у вас будет работать.
pupsik

Согласен с вами полностью. При первой же возможности просто обновлюсь (как только для нужного компонента появится совместимость с 2.17)

#6 Ошибка 503 при подтверждении регистрации 7 марта 2025 в 16:45
Ну то есть предлагаете откатится к состоянию чистой системы? Ostrova Нет. Вы не написали когда вы удалили группу. Просто написали что удалили на каком то этапе.
pupsik

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

#7 Ошибка 503 при подтверждении регистрации 7 марта 2025 в 10:47
 Ostrova, создайте новую группу «Новые». Проставьте ей все права доступа в настройках. Выберите эту новую группу в компоненте Авторизация и регистрация. Проблемы быть не должно.
Zau4man

Все это сделал, проблема остается. В общем, все же дело в версии 2.16.3. Сделал копию сайта на локалке, обновил ее до 2.17, проблема ушла. Мой вопрос это не снимает, поскольку пока обновить до 2.17 не могу из-за несовместимости компонентов. 

Если у кого-то стоит 2.16.3, отпишитесь пожалуйста, нет ли такой же проблемы?

#8 Ошибка 503 при подтверждении регистрации 7 марта 2025 в 09:34
Страшно спросить чем вы там занимаетесь...  Вы backup DB делали? Восстановите и радуйтесь. Всегда делайте баккапы периодически. Решили делать дебуг? Делайте бакауп ДО. Убили сайт ища проблему?
pupsik

Ну а как вы считаете, делаю я бэкапы, или нет? Ну то есть предлагаете откатится к состоянию чистой системы? (А именно тогда я группу «новые» и удалил). Просто ошибка эта вылезла сейчас, когда включил подтверждение почты на уже готовом сайте, загруженном на хостинг. 

#9 Ошибка 503 при подтверждении регистрации 7 марта 2025 в 01:56

Новые вводные: на каком-то из этапов настройки сайта я удалил группу «новые». И что-то видимо пошло не так. Пока попробовал восстановить группу и прописал в базе ей id 3, но не помогло. Идеи?

#10 Ошибка 503 при подтверждении регистрации 5 марта 2025 в 16:51
Крон выполняет другие действия pupsik тут явно не крон. В запросе к базе нет групп у пользователя. Такого быть не может, если настройки заполнены. 
Zau4man

При загрузке на сервер опция автоматического добавления в группу была отключена, но был выбор из нескольких групп. Пользователь выбирал и всё работало на локалке. Здесь тоже работает: регистрация и подтверждение по факту происходит, добавление в выбранные группы тоже. Просто на этапе подтверждения почты выходит эта ошибка. 

Для теста я отключал выбор групп, ставил галочку добавлять пользователя в группу «пользователи». История та же — ошибка на этапе подтверждения. 

Добавлено спустя 9 минут
Крон выполняет другие действия pupsik тут явно не крон. В запросе к базе нет групп у пользователя. Такого быть не может, если настройки заполнены. 
Zau4man

В БД вручную эту опцию можно проверить\прописать для проверки?

#11 Ошибка 503 при подтверждении регистрации 5 марта 2025 в 16:18
Вот, дабы время не тратили на поиски: instantcms.ru/forum/registracija-i-gmail-opjat.html
pupsik

Эту тему я помню, читал. Тут больше про очередь e-mail. Сейчас не уверен что Cron как-то влияет на регистрацию и подтверждение. Но настраивать в любом случае надо. 

#12 Ошибка 503 при подтверждении регистрации 5 марта 2025 в 16:07
Забыл указать что у меня система 2.16.Сайт как мой ник .me На гугловкие почты правда пока письма не приходят.  Еще забыл указать (скорее всего это важно), что у меня пока не настроен cron.
pupsik

Хорошо, спасибо за наводку 🤝 поработаю в этом направлении

#13 Ошибка 503 при подтверждении регистрации 5 марта 2025 в 15:54
 Ostrova, обновитесь и будет вам счастье 
Happy

С радостью бы, да много компонентов установлено, которые не работают с новой версией. 

#14 Ошибка 503 при подтверждении регистрации 5 марта 2025 в 15:47
На чистой 2.17.1 повторить проблему не удается. Ни с выбором, ни без. Ни с почтой, ни без подтверждения.
Zau4man

Забыл указать что у меня система 2.16.Сайт как мой ник .me На гугловкие почты правда пока письма не приходят. 

Еще забыл указать (скорее всего это важно), что у меня пока не настроен cron. Еще мучаюсь с ним, не могу разобраться. Это может влиять?

Добавлено спустя 2 часа

Еще один нюанс выплыл. Если отключаешь подтверждение почты и оставляешь «авторизовывать после регистрации», то регистрация происходит, но авторизация нет. 

Добавлено спустя 3 часа

Друзья, накидайте пожалуйста хотя бы примерно варианты. Может файлы перезалить попробовать, или еще что?

Добавлено спустя 20 часов

Ну же, коллективный разум 🙌

#15 Ошибка 503 при подтверждении регистрации 4 марта 2025 в 12:38
В настройках компонента Авторизация и регистрация не выбраны группы пользователей, в которые он должен быть помещен по умолчанию. Поэтому  WHERE (i.group_id IN ()) пустое
Zau4man

Спасибо за ответ. В настройках включена группа «пользователи» при регистрации. Была включена возможность пользователю выбирать другие группы при вступлении. Попробовал все отключить — все равно та же ошибка. 

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.