我一直得到 "Uncaught SyntaxError: Unexpected token o"

27 浏览
0 Comments

我一直得到 "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)\",所以我知道它正在加载它(或者至少在尝试加载)。

0
0 Comments

在使用jQuery的成功处理程序时,如果响应头是text/html,你需要手动解析数据;如果响应头是application/json,数据已经被解析好了。

当响应头是text/html时,你可以使用JSON.parse()方法来解析数据:

var parsed = JSON.parse(data);

当响应头是application/json时,数据已经被自动解析好了,你可以直接使用:

var parsed = data;

如果你遇到了"Uncaught SyntaxError: Unexpected token o"错误,那么可能是因为你尝试对已经解析好的数据再次进行解析。请检查你的代码,确保你只对需要解析的数据进行解析操作。

注意,如果你发现这个答案有用,请不要投票给下面的回答,因为上面的回答完全复制了这个答案。

0
0 Comments

问题的原因是代码中对数据进行了两次解析,导致出现了语法错误。实际上,get方法已经设置了dataType='json',所以返回的数据已经是JSON格式的。解决方法是使用$.ajax({ dataType: 'json' ...来明确指定返回的数据类型。

0
0 Comments

最终确定的问题出现的原因是:在尝试调用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文件,并使用合适的函数来处理数据。

0