未捕获的SyntaxError:位于0的JSON中的意外标记u

时间:2017-10-06 20:07:39

标签: javascript json syntax-error magento2

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

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)

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

7 个答案:

答案 0 :(得分:64)

在控制台中尝试:

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,这可能是由忽略错误的客户端脚本引起的,并且在他们不应该发送请求时发出。

确保服务器端和客户端脚本都在strict mode中运行,并使用ESLint对其进行lint。这会让你非常自信没有拼写错误。

答案 1 :(得分:2)

localStorage.clear()

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

答案 2 :(得分:1)

正如@Seth Holladay @MinusFour评论的那样,您正在解析do { recordingSession = AVAudioSession.sharedInstance() try recordingSession.setCategory(AVAudioSessionCategoryRecord) }catch {} 变量。
尝试在进行解析之前添加undefined条件。

if

注意:这只是对if (typeof test1 !== 'undefined') { test2 = JSON.parse(test1); } 案例的检查。还需要处理任何其他解析问题。

答案 3 :(得分:0)

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

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

删除这段代码即可解决问题。

答案 4 :(得分:0)

这个问题我持续了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.responsethis.responseText

答案 5 :(得分:0)

您的应用正在尝试解析未定义的JSON网络令牌。可能由于错误使用本地存储设备而导致此类故障。尝试清除您的本地存储。

Chrome浏览器示例:

  1. F12
  2. 应用程序
  3. 本地存储
  4. 全部清除

答案 6 :(得分:-1)

这是由于页面上出现了干扰messages。页面上有多个框架,使用窗口消息事件和对象与页面进行通信。其中很少可以是cookieq等第三方服务来管理cookie,或者可能是cartwire e-com集成服务。

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

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