关于javascript: “Uncaught SyntaxError: Unexpected token o”

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行,即var glacier = JSON.parse(data);行。

当我删除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);
});

你分析了两次。get使用dataType='json',所以数据已经是JSON格式。使用$.ajax({ dataType: 'json' ...专门设置返回的数据类型!


基本上,如果响应头是需要解析的文本/html,并且如果响应头是application/json,那么已经为您解析了它。

从jquery成功处理程序分析的文本/html响应数据:

1
var parsed = JSON.parse(data);

从jquery成功处理程序为application/json响应解析的数据:

1
var parsed = data;


关于Unexpected token错误的另一个提示。JavaScript对象和JSON有两个主要区别:

  • JSON数据必须总是用双引号引起来。
  • 必须引用密钥
  • 校正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"
    }

    备注

    这不是那个问题的直接答案。但这是对Unexpected token错误的回答。因此,在这个问题上犹豫不决的人可能会有所帮助。


    简单地说,响应已经被解析了,您不需要再次解析它。如果您再次分析它,它会给您"意外的令牌O",但是您必须在请求中指定类型为dataType='json'的数据类型。


    我刚才遇到了类似的问题,我的解决方案可能会有所帮助。我使用一个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