Что ж, интересная развязка истории. Раз уж вариантов решения не поступало, решил сформулировать вопрос правильно и задать его 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 уже объект
Все заработало. Спасибо ИИ.