I keep getting “Uncaught SyntaxError: Unexpected token o”
我正在尝试学习一些HTML/CSS/javascript,所以我给自己写了一个教学项目。
其想法是在JSON文件中包含一些词汇表,然后将其加载到表中。我设法将文件装入并打印出它的一个值,然后开始编写代码将值装入表中。
在做了这些之后,我开始出错,所以我删除了所有我写的代码,只留下一行代码(以前工作过的同一行代码)。只有错误仍然存在。
误差如下:
1 2 3 4 5 6 | 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代码包含在一个单独的文件中,只是这样:
1 2 3 4 5 6 7 8 9 10 | 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文件现在只有以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [ { "english":"bag", "kana":"kaban", "kanji":"K" }, { "english":"glasses", "kana":"megane", "kanji":"M" } ] |
现在错误报告在第11行,即
当我删除json文件时,我得到了错误:"get http://…/wokab.json 404(not found)",所以我知道它正在加载它(或者至少正在尝试)。
看起来jquery对数据类型有猜测。它执行JSON解析,即使您没有调用getjson()——然后当您尝试对一个对象调用json.parse()时,就会得到错误。
阿迪蒂亚·米塔尔的回答中可以找到进一步的解释。
The problem is very simple
1 2 3 | jQuery.get('wokab.json', function(data) { var glacier = JSON.parse(data); }); |
你分析了两次。
基本上,如果响应头是需要解析的文本/html,并且如果响应头是application/json,那么已经为您解析了它。
从jquery成功处理程序分析的文本/html响应数据:
1 | var parsed = JSON.parse(data); |
从jquery成功处理程序为application/json响应解析的数据:
1 | var parsed = data; |
关于
校正JSON
1 2 3 4 5 | { "english":"bag", "kana":"kaban", "kanji":"K" } |
错误JSON 1
1 2 3 4 5 | { 'english': 'bag', 'kana': 'kaban', 'kanji': 'K' } |
错误JSON 2
1 2 3 4 5 | { english:"bag", kana:"kaban", kanji:"K" } |
备注
这不是那个问题的直接答案。但这是对
简单地说,响应已经被解析了,您不需要再次解析它。如果您再次分析它,它会给您"意外的令牌O",但是您必须在请求中指定类型为
我刚才遇到了类似的问题,我的解决方案可能会有所帮助。我使用一个iframe上传和转换一个XML文件到json,并将其发送到后台,chrome向传入的数据添加了一些垃圾,这些垃圾只会间歇性地出现,并导致"uncaught syntaxerror:unexpected token o"错误。
我访问的iframe数据如下:
1 | $('#load-file-iframe').contents().text() |
它在本地主机上工作得很好,但是当我将它上载到服务器时,它只停止处理一些文件,并且只在按一定顺序加载文件时停止工作。我不知道是什么造成的,但这解决了它。我把上面的线改成了
1 | $('#load-file-iframe').contents().find('body').text() |
有一次我在HTML响应中发现了一些垃圾。
长话短说,检查一下你的原始HTML响应数据,你可能会把事情搞糟。
确保您的JSON文件前后没有任何尾随字符。也许是不可打印的?你可能想试试这样的方法:
[cc lang="javascript"][{"english":"bag","kana":"kaban","kanji":"K