提问人:Howli 提问时间:10/7/2017 最后编辑:J. ChomelHowli 更新时间:11/2/2023 访问量:283019
未捕获的 SyntaxError:位置 0 处的 JSON 中出现意外的标记 u
Uncaught SyntaxError: Unexpected token u in JSON at position 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)
我正在使用单页结帐扩展程序,但是当我禁用该扩展程序时,仍然显示错误。我认为这可能与产品页面上的评论有关(因为我将评论移出选项卡),但撤消该更改并不能修复产品页面上的错误。
答:
在控制台中尝试以下操作:
JSON.parse(undefined)
这是你会得到的:
Uncaught SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at <anonymous>:1:6
换句话说,您的应用正在尝试解析 ,这不是有效的 JSON。undefined
造成这种情况的常见原因有两个。首先,您可能引用了一个不存在的属性(如果不是在严格模式下,甚至可能是一个不存在的变量)。
window.foobar = '{"some":"data"}';
JSON.parse(window.foobarn) // oops, misspelled!
第二个常见原因是首先无法接收 JSON,这可能是由于客户端脚本忽略错误并在不应该发送时发送请求引起的。
确保您的服务器端和客户端脚本都在严格模式下运行,并使用 ESLint 对它们进行 lint 检查。这将使您非常有信心没有错别字。
评论
ð??¸
这是由于页面上的干扰。页面上有多个框架,它们使用窗口消息事件和对象与页面进行通信。它们中很少有可能是第三方服务,例如用于管理 cookie,或者可能是 e-com 集成服务。messages
cookieq
cartwire
您需要处理 onmessage 事件以检查消息的来源,然后相应地解析 JSON。
我遇到了一个类似的问题,其中一个集成是传递一个JSON对象,另一个是传递一个以u
正如 @Seth Holladay @MinusFour 所评论的那样,您正在解析一个变量。
尝试在执行解析之前添加条件。undefined
if
if (typeof test1 !== 'undefined') {
test2 = JSON.parse(test1);
}
注意:这只是对大小写的检查。任何其他解析问题仍需要处理。undefined
评论
undefined
Unexpected token u in JSON at position 0
对我来说,发生这种情况是因为我的页面中有一个空组件 -
<script type="text/x-magento-init">
{
".page.messages": {
"Magento_Ui/js/core/app": []
}
}
删除这段代码解决了该问题。
我有这个问题 2 天了,让我告诉你我是如何解决它的。
这是我收到错误时代码的样子:
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
this.responseText
localStorage.clear()
这将清除存储的数据。然后刷新,事情应该开始工作了。
你的应用正在尝试分析未定义的 JSON Web 令牌。由于本地存储的错误使用,可能会发生此类故障。尝试清除本地存储。
Google Chrome 示例:
- F12型
- 应用
- 本地存储
- 全部清除
评论
如果得到,则可以进行以下快速检查:Uncaught SyntaxError: Unexpected token u in JSON at position 0
jsObj = JSON.parse(data)
data - 检查数据是否未定义
data - 检查数据是否为有效的 JSON 字符串
data - 检查数据是否被不需要的空格损坏
data = data.trim(); // remove the unwanted whitespace jsObj = JSON.parse(data);
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'
您可以简单地检查数据是否具有某些值或未定义:
if(res){
let apiResponse = JSON.parse(res);
}
它会起作用的。
上一个:为什么 Eclipse 抱怨接口方法@Override?
下一个:布尔玛卡内容变色
评论
undefined
JSON.parse
JSON.parse