我不断收到“Uncaught SyntaxError:Unexpected token o”

我试图学习一些html / css / javascript,所以我自己写一个教学项目。

这个想法是在json文件中包含一些词汇,然后将其加载到一个表格中。 我设法加载文件并打印出其中一个值,之后我开始编写代码将值加载到表中。

这样做后,我开始得到一个错误,所以我删除了我写的所有代码,只留下一行(与之前工作过的同一行),只有错误仍然存​​在。

错误如下:

Uncaught SyntaxError: Unexpected token o (anonymous function)script.js:10 jQuery.Callbacks.firejquery-1.7.js:1064 jQuery.Callbacks.self.fireWithjquery-1.7.js:1182 donejquery-1.7.js:7454 jQuery.ajaxTransport.send.callback 

我的JavaScript代码包含在一个单独的文件,只是这样的:

 function loadPageIntoDiv(){ document.getElementById("wokabWeeks").style.display = "block"; } function loadWokab(){ //also tried getJSON which threw the same error jQuery.get('wokab.json', function(data) { var glacier = JSON.parse(data); }); } 

而我的JSON文件现在只有以下几点:

 [ { "english": "bag", "kana": "kaban", "kanji": "K" }, { "english": "glasses", "kana": "megane", "kanji": "M" } ] 

现在错误报告在第11行,这是var glacier = JSON.parse(data); 线。

当我删除JSON文件,我得到的错误:“GET http://…/wokab.json 404(未find)”,所以我知道它的加载(或至less尝试)。

看起来像jQuery对数据types进行猜测。 即使你没有调用getJSON(),它也会执行JSONparsing,然后当你尝试在一个对象上调用JSON.parse()时,你会得到错误。

Aditya Mittal的答案可以进一步解释。

问题很简单

 jQuery.get('wokab.json', function(data) { var glacier = JSON.parse(data); }); 

你parsing它两次。 get使用dataType='json' ,所以数据已经是json格式。 使用$.ajax({ dataType: 'json' ...专门设置返回的数据types!

基本上,如果响应头是文本/ HTML你需要parsing,如果响应头是应用程序/ JSON它已经为你parsing。

从jquery成功处理程序parsingtext / html响应的数据:

 var parsed = JSON.parse(data); 

从jquery成功处理程序parsing应用程序/ json响应的数据:

 var parsed = data; 

另一个提示Unexpected token错误。 javascript对象和json有两个主要区别:

  1. json数据必须总是用双引号括起来。
  2. 密钥必须被引用

正确的JSON

  { "english": "bag", "kana": "kaban", "kanji": "K" } 

错误的JSON 1

  { 'english': 'bag', 'kana': 'kaban', 'kanji': 'K' } 

错误JSON 2

  { english: "bag", kana: "kaban", kanji: "K" } 

备注

这不是对这个问题的直接回答。 但这是Unexpected token错误的答案。 所以这可能会帮助别人扼杀这个问题。

简单地说,响应已经被parsing了,你不需要再parsing它。 如果你再次parsing它会给你“意想不到的令牌o”,但是你必须在你的请求中指定数据types为dataType='json'

我刚刚有一个类似的问题,我的解决scheme可能会有所帮助。 我正在使用iframe来上传xml文件并将其转换为json,并在后台将其发送回来,而Chrome则为传入的数据添加了一些垃圾,这些垃圾只会间歇性地显示,导致“Uncaught SyntaxError:Unexpected token o”错误。

我正在访问像这样的iframe数据:

 $('#load-file-iframe').contents().text() 

在localhost上工作正常,但是当我上传到服务器时,它停止工作只有一些文件,只有当以特定的顺序加载文件。 我真的不知道是什么原因造成的,但是这固定了它。 我改变了上面的行

 $('#load-file-iframe').contents().find('body').text() 

一旦我注意到HTML响应中的一些垃圾。

长话短说检查你的原始HTML响应数据,你可能会把事情做好。

确保您的JSON文件在之前或之后没有任何结尾字符。 也许是一个不可打印的? 你可能想尝试这种方式:

 [{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}] 

我没有直接的答案,不幸的是,但如果错误来自JSON.parse – 那么应该有一些方法来获得错误报告。 我有一段代码,只是在PHP中做的 – 如果不能解决所有其他问题,可以尝试使用PHPparsing相同的json文件,看看会发生什么。 PHP中的JSON错误报告:

 // debugging json_decode if ( 1==2 && isset($formState) ) { echo 'here: ' . gettype( json_decode($formState->encoded_form) ); //echo '<textarea>'.$formState->encoded_form.'</textarea>'; // Define the errors. $constants = get_defined_constants(true); $json_errors = array(); foreach ($constants["json"] as $name => $value) { if (!strncmp($name, "JSON_ERROR_", 11)) { $json_errors[$value] = $name; } } echo 'Last error: ', $json_errors[json_last_error()]; } 

我用这个

 $.ajax({ type: 'GET', url: '/get/local/url', dataType: 'json', success: function (data) { inboxname = data[0]; inbox = data[1]; domain = data[2]; password = data[3]; passage = data[4]; } })