首页 文章

我一直得到“Uncaught SyntaxError:Unexpected token o”

提问于
浏览
293

我正在尝试学习一些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(Not Found)”所以我知道它正在加载它(或者至少尝试) .

7 回答

  • 308

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

    • json数据必须始终用双引号引用 .
      必须引用

    Correct JSON

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

    Error JSON 1

    {
        'english': 'bag',
        'kana': 'kaban',
        'kanji': 'K'
     }
    

    Error JSON 2

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

    Remark

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

  • 0

    确保您的JSON文件之前或之后没有任何尾随字符 . 也许是一个不可打印的?您可能想尝试这种方式:

    [{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}]
    
  • 2

    问题很简单

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

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

  • 76

    我刚才有类似的问题,我的解决方案可能有所帮助 . 我正在使用iframe上传并将xml文件转换为json并将其发送回幕后,Chrome正在为传入的数据添加一些垃圾,这些数据只会间歇性地显示并导致“未捕获的SyntaxError:意外的令牌o”错误 .

    我正在访问iframe数据,如下所示:

    $('#load-file-iframe').contents().text()
    

    它在localhost上运行良好,但是当我将它上传到服务器时,它只停止使用某些文件,并且只在按特定顺序加载文件时才能使用 . 我真的不知道是什么导致了它,但这解决了它 . 我将上面的行更改为

    $('#load-file-iframe').contents().find('body').text()
    

    一旦我注意到HTML响应中有一些垃圾 .

    长话短说检查您的原始HTML响应数据,您可能会改变一些事情 .

  • 9

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

    Parsed data from jquery success handler for text/html response:

    var parsed = JSON.parse(data);
    

    Parsed data from jquery success handler for application/json response:

    var parsed = data;
    
  • 44

    只需解析响应,您无需再次解析它 . 如果你再次解析它会给你"unexpected token o"但是你必须在你的请求中指定数据类型为 dataType='json'

  • 1

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

    进一步的解释可以在Aditya Mittal's answer找到 .

相关问题