Uncaught SyntaxError: неожиданный токен u в JSON в позиции 0

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

VM35594:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at run (layout.min.js:9)
    at app.min.js:1
    at main.min.js:2
    at Object.execCb (require.min.js:112)
    at Module.check (require.min.js:56)
    at Module.<anonymous> (require.min.js:72)
    at require.min.js:11
    at require.min.js:74
    at each (require.min.js:3)

Я использую расширение проверки одной страницы, но когда я отключаю это, ошибка все еще отображается. Я думал, что это может иметь какое-то отношение к отзывам на странице продукта (поскольку я переместил отзывы из вкладок), но отмена этого изменения не исправила ошибку на страницах продукта.

3 ответов


попробуйте это в консоли:

JSON.parse(undefined)

вот что вы получите:

Uncaught SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at <anonymous>:1:6

другими словами, ваше приложение пытается парсить undefined, который не является допустимым JSON.

для этого есть две общие причины. Во-первых, вы можете ссылаться на несуществующее свойство (или даже на несуществующую переменную, если она не находится в строгом режиме).

window.foobar = '{"some":"data"}';
JSON.parse(window.foobarn)  // oops, misspelled!

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

убедитесь, что оба скрипта на стороне сервера и клиента запущены в строгого режима и lint их с помощью ESLint. Это даст вам довольно хорошую уверенность в том, что опечаток нет.


это связано с вмешательства messages, которые приходят на страницу. На странице есть несколько кадров, которые взаимодействуют со страницей с помощью события и объекта сообщения окна. немногие из них могут быть сторонними службами, такими как cookieq управление cookies, или может быть cartwire служба интеграции e-com.

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

я столкнулся с аналогичной проблемой, где одна из интеграций передавала объект JSON, а другая передавала строку, начинающуюся с u


как прокомментировал @Seth Holladay @MinusFour, вы анализируете undefined переменной.
Попробуйте добавить if условие перед выполнением анализа.

if (typeof test1 !== 'undefined') { test2 = JSON.parse(test1); }

Примечание: это просто проверка на undefined случае. Любые другие проблемы синтаксического анализа все еще должны быть обработаны.