未捕获的语法错误:JSON 中的意外标记 u 位于位置 0

IT技术 javascript json syntax-error magento2
2021-03-08 09:19:21

仅在结帐和单个产品页面上,我在控制台日志中收到以下错误:

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)

我正在使用一页结帐扩展程序,但是当我禁用它时,错误仍然显示。我认为这可能与产品页面上的评论有关(因为我将评论移出了选项卡),但撤消该更改并不能修复产品页面上的错误。

6个回答

在控制台中试试这个:

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,这可能是由于客户端脚本忽略错误并在不应该发送请求时发送请求造成的。

确保您的服务器端和客户端脚本都在严格模式下运行,并使用ESLint 对它们进行lint这会给你很大的信心,没有错别字。

对我来说,我编码的表情符号使正在解码的 JSON 无效。我的 .json 文件中的字符串中有一个值ð??¸我在 React Native 中使用 fetch 来发出请求,JSON 解析会导致这个错误,直到我从 JSON 中取出 Emoji。更多信息:ttps://stackoverflow.com/questions/7177808/emoji-characters-cannot-be-encoded-to-json
2021-05-01 09:19:21

正如@Seth Holladay @MinusFour 评论的那样,您正在解析一个undefined变量。在进行解析之前
尝试添加if条件。

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

注意:这只是一个undefined案例检查任何其他解析问题仍然需要处理。

没错,这将防止程序崩溃。然而,在大多数情况下,当给出无效输入时程序崩溃是好的。不过,这取决于数据的来源。无论哪种方式,请注意,很多东西都是无效的 JSON,而不仅仅是undefined,所以这几乎不是一个强大的检查。nczonline.net/blog/2009/03/03/…
2021-04-26 09:19:21
真的。这只是涵盖了Unexpected token u in JSON at position 0还有其他问题还需要处理。将更新我的答案。
2021-04-28 09:19:21
localStorage.clear()

这将清除存储的数据。然后刷新,事情应该开始工作。

对我来说,这是因为我的页面中有一个空组件 -

<script type="text/x-magento-init">
   {
   ".page.messages": {
       "Magento_Ui/js/core/app": []        
      }
   }

删除这段代码解决了这个问题。

您的应用程序正在尝试解析未定义的 JSON 网络令牌。此类故障可能是由于本地存储使用不当造成的。尝试清除本地存储。

谷歌浏览器示例:

  1. F12
  2. 应用
  3. 本地存储
  4. 清除所有
我刚遇到这个问题,亚历山大鲍里索夫就在现场。请允许我将“会话存储”添加到要清除的位置列表中。就我而言,我使用它来存储身份验证令牌,问题出现在从 Flask 到 FastAPI 的过渡期间。
2021-05-03 09:19:21