未捕获的语法错误: JSON 中位置为0的意外令牌 u

只有在结帐和单独的产品页面上,我才会在控制台日志中看到以下错误:

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)

I am using a one page checkout extension, but when I disable that the error still shows. I thought it might had something to do with the reviews on the product page (as I moved the reviews out of the tabs), but undoing that change didn't fix the error on the product pages.

258006 次浏览

Try this in the console:

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

Make sure both your server-side and client-side scripts are running in 严格模式 and lint them using 埃斯林特. This will give you pretty good confidence that there are no typos.

This is due to the interfering messages that come on to the page. There are multiple frames on the page which communicate with the page using window message event and object. few of them can be third party services like cookieq for managing cookies, or may be cartwire an e-com integration service.

您需要处理 onmessage 事件来检查消息来自何处,然后相应地解析 JSON。

我遇到了类似的问题,其中一个集成传递了一个 JSON 对象,另一个集成传递了一个以 u开头的字符串

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

如果(typeof test1! = = ‘ unDefinition’){ Test2 = JSON.parse (test1) ; }

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

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

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

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

这个问题我已经有两天了,让我告诉你我是怎么解决的。

当我得到这个错误时,代码看起来是这样的:

request.onload = function() {
// This is where we begin accessing the Json
let data = JSON.parse(this.response);
console.log(data)
}

这就是我为了得到我想要的结果而做出的改变:

request.onload = function() {
// This is where we begin accessing the Json
let data = JSON.parse(this.responseText);
console.log(data)
}

所以我真正做的就是改变 this.response to this.responseText.

localStorage.clear()

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

您的应用程序正在尝试解析未定义的 JSON Web 令牌。这种故障可能是由于错误使用本地存储器造成的。尝试清空您的本地存储。

以谷歌 Chrome 为例:

  1. F12
  2. 申请
  3. 本地仓库
  4. 安全

If you get Uncaught SyntaxError: Unexpected token u in JSON at position 0 then you could do the following quick checks:

jsObj = JSON.parse(data)
  1. data - check the data is 未定义 or not

  2. 数据-检查数据是否是有效的 JSON 字符串

  3. 数据-检查数据是否被不需要的空格损坏

    data = data.trim(); // remove the unwanted whitespace
    jsObj = JSON.parse(data);
    
  4. Data-检查接收到的数据是否使用正确的编码格式(‘ Utf8’,‘ utf16le’,‘ ucs2’)

    fs.readFile(file, 'utf8', function(err, data) { ... });
    
    
    fs.readFile(file, 'utf16le', function(err, data) { ... }); // le - little endian
    
    
    fs.readFile(file, 'ucs2', function(err, data) { ... });   // kind  of 'utf16le'