我一直得到 "Uncaught SyntaxError: Unexpected token o"
我一直得到 "Uncaught SyntaxError: Unexpected token o"
我正在尝试学习一些HTML/CSS/JavaScript,所以我正在写一个教学项目。\n我的想法是将一些词汇包含在一个JSON文件中,然后将其加载到一个表格中。我成功地加载了文件并打印出其中一个值,然后我开始编写代码将这些值加载到表格中。\n在做完这些后,我开始遇到一个错误,所以我删除了我写的所有代码,只剩下一行代码(之前能正常工作的那一行)...但是错误仍然存在。\n错误如下所示:\n
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
\n我的JavaScript代码包含在一个单独的文件中,内容如下:\n
function loadPageIntoDiv(){ document.getElementById("wokabWeeks").style.display = "block"; } function loadWokab(){ //也尝试了使用getJSON,但是仍然报同样的错误 jQuery.get('wokab.json', function(data) { var glacier = JSON.parse(data); }); }
\n我的JSON文件目前只有以下内容:\n
[ { "english": "bag", "kana": "kaban", "kanji": "K" }, { "english": "glasses", "kana": "megane", "kanji": "M" } ]
\n现在错误报告在第11行,即var glacier = JSON.parse(data);
这一行。\n当我删除JSON文件时,我会得到错误:\"GET http://.../wokab.json 404 (Not Found)\",所以我知道它正在加载它(或者至少在尝试加载)。
在使用jQuery的成功处理程序时,如果响应头是text/html,你需要手动解析数据;如果响应头是application/json,数据已经被解析好了。
当响应头是text/html时,你可以使用JSON.parse()方法来解析数据:
var parsed = JSON.parse(data);
当响应头是application/json时,数据已经被自动解析好了,你可以直接使用:
var parsed = data;
如果你遇到了"Uncaught SyntaxError: Unexpected token o"错误,那么可能是因为你尝试对已经解析好的数据再次进行解析。请检查你的代码,确保你只对需要解析的数据进行解析操作。
注意,如果你发现这个答案有用,请不要投票给下面的回答,因为上面的回答完全复制了这个答案。
最终确定的问题出现的原因是:在尝试调用JSON.parse()函数时,该函数将对象作为参数,导致错误出现。
解决方法:不需要解析JSON文件,因为data[0].english返回的就是"bag"这个字符串。另外,可以使用jQuery的getJSON()函数,它会自动解析JSON数据。
在Aditya Mittal的回答中可以找到更详细的解释。
其他人的评论和回答中也提到了类似的问题和解决方法。
其中一个评论指出,如果将一个对象作为参数传递给JSON.parse()函数,会抛出"Unexpected token o"的错误,因为它尝试解析obj_to_parse.toString(),而这个结果是"[object Object]"。可以尝试JSON.parse('[object Object]')来验证。
另一个评论提到,当已经是JSON对象时,尝试将其转换为JSON字符串再解析会出现这个错误。
另外,还有一些评论解释了jQuery对数据类型的处理方式,它根据响应的Content-type头部确定数据的类型,并在需要时进行解析。
这个问题的原因是尝试在对象上调用JSON.parse()函数,解决方法是避免解析JSON文件,并使用合适的函数来处理数据。