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

Bjo*_*inn 303 javascript jquery json

我正在尝试学习一些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
Run Code Online (Sandbox Code Playgroud)

我的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);
    });
}
Run Code Online (Sandbox Code Playgroud)

我的JSON文件现在只有以下内容:

[
    {
        "english": "bag",
        "kana": "kaban",
        "kanji": "K"
    },

    {
        "english": "glasses",
        "kana": "megane",
        "kanji": "M"
    }
]
Run Code Online (Sandbox Code Playgroud)

现在错误报告在第11行,即var glacier = JSON.parse(data);行.

当我删除json文件时,我收到错误:"GET http://.../wokab.json 404(Not Found)"所以我知道它正在加载它(或者至少尝试).

ek_*_*_ny 312

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

可以在Aditya Mittal的答案中找到进一步的解释.

  • 小注意:如果你是`JSON.parse`一个对象,就会抛出"意外的标记o",因为它试图解析`obj_to_parse.toString()`,它是``object Object]`.尝试`JSON.parse('[object Object]');`;) (87认同)
  • 它也发生在我身上,我认为我的错误是我试图解析JSON已经是JSON对象的东西 (22认同)
  • 啊哈,所以data [0] .english返回"bag".看起来我根本不需要解析json文件. (13认同)
  • 这很有趣.. 我猜 jquery 猜测数据类型并假设它是 json。我认为 getJson 也会起作用,对吗? (2认同)
  • jQuery不会“猜测”。如果您不使用`dataType`覆盖它(为什么要这么做),它将使用响应的“ Content-type` HTTP标头来确定它是哪种数据,并解析它是否是jQuery识别的数据。 。 (2认同)

And*_*kus 76

问题很简单

jQuery.get('wokab.json', function(data) {
    var glacier = JSON.parse(data);
});
Run Code Online (Sandbox Code Playgroud)

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


Adi*_*tal 53

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

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

var parsed = JSON.parse(data);
Run Code Online (Sandbox Code Playgroud)

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

var parsed = data;
Run Code Online (Sandbox Code Playgroud)

  • 对任何投票的人都要注意,上面接受的答案包含来自这个答案的精确副本.立即从接受的答案添加链接. (6认同)

Mat*_*s M 10

另一个Unexpected token错误提示.javascript对象和json之间有两个主要区别:

  1. json数据必须始终用双引号引用.
  2. 必须引用密钥

正确的JSON

 {
    "english": "bag",
    "kana": "kaban",
    "kanji": "K"
}
Run Code Online (Sandbox Code Playgroud)

错误JSON 1

 {
    'english': 'bag',
    'kana': 'kaban',
    'kanji': 'K'
 }
Run Code Online (Sandbox Code Playgroud)

错误JSON 2

 {
    english: "bag",
    kana: "kaban",
    kanji: "K"
}
Run Code Online (Sandbox Code Playgroud)

备注

这不是该问题的直接答案.但它是Unexpected token错误的答案.所以它可能会帮助其他人解决这个问题.