开发者问题收集

我不断收到“未捕获的语法错误:意外的标记 o”

2011-11-10
432050

我正在尝试学习一些 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 (未找到)”所以我知道它正在加载它(或至少正在尝试加载)。

3个回答

看起来 jQuery 猜测了数据类型。即使您没有调用 getJSON(),它也会进行 JSON 解析——然后当您尝试在对象上调用 JSON.parse() 时,您会收到错误。

更多解释可以在 Aditya Mittal 的回答 中找到。

ek_ny
2011-11-10

问题很简单

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

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

Andrius Bentkus
2012-02-06

基本上,如果响应标头是 text/html,则需要解析,如果响应标头是 application/json,则它已经为您解析了。

来自 jquery 成功处理程序的 text/html 响应的解析数据:

var parsed = JSON.parse(data);

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

var parsed = data;
Aditya Mittal
2015-11-03