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

Javascript 我不断地得到;未捕获的语法错误:意外标记“o”;,javascript,jquery,json,Javascript,Jquery,Json,我正在努力学习一些html/css/javascript,所以我正在给自己写一个教学项目 其想法是在json文件中包含一些词汇表,然后将其加载到表中。我设法装入文件并打印出其中一个值,然后开始编写代码将值装入表中 这样做之后,我开始出现错误,所以我删除了所有我编写的代码,只剩下一行(与以前的代码相同)。。。只有错误还在那里 错误如下: Uncaught SyntaxError: Unexpected token o (anonymous function)script.js:10 jQuery.

我正在努力学习一些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(数据)


当我删除json文件时,会出现错误:“get 404(Not Found)”,因此我知道它正在加载(或者至少正在尝试加载)。

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


可以在中找到进一步的解释。

我刚才遇到了一个类似的问题,我的解决方案可能会有所帮助。我正在使用iframe上传xml文件并将其转换为json,然后将其发送回后台,Chrome在传入数据中添加了一些垃圾,这些垃圾只会间歇性出现,并导致“未捕获的语法错误:意外的标记o”错误

我访问iframe数据的方式如下:

$('#load-file-iframe').contents().text()
这在localhost上运行得很好,但当我将其上载到服务器时,它仅停止处理某些文件,并且仅在以特定顺序加载文件时才停止工作。我真的不知道是什么原因造成的,但这解决了它。我把上面的线改成了

$('#load-file-iframe').contents().find('body').text()
有一次我注意到HTML响应中有一些垃圾


长话短说检查原始HTML响应数据,您可能会发现一些问题。

确保JSON文件前后没有任何尾随字符。也许是无法打印的?您可能希望尝试以下方法:

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

问题很简单

jQuery.get('wokab.json', function(data) {
    var glacier = JSON.parse(data);
});
你要分析它两次
get
使用
dataType='json'
,因此数据已经是json格式的。
使用
$.ajax({dataType:'json'…
专门设置返回的数据类型!

只要响应已经解析,您就不需要再次解析它。如果您再次解析它,它将给您“意外的令牌o”但是,如果响应头是需要解析的text/html,并且如果响应头是application/json,则必须在请求中指定数据类型为
datatype='json'

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

var parsed = JSON.parse(data);
var parsed = data;
从jquery成功处理程序为应用程序/json响应解析的数据:

var parsed = JSON.parse(data);
var parsed = data;

意外标记的另一个提示
错误。 javascript对象和json之间有两个主要区别:

  • json数据必须始终用双引号引起来
  • 密钥必须被引用
  • 正确的JSON

     {
        "english": "bag",
        "kana": "kaban",
        "kanji": "K"
    }
    
    错误JSON 1

     {
        'english': 'bag',
        'kana': 'kaban',
        'kanji': 'K'
     }
    
    错误JSON 2

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

    这不是对那个问题的直接回答。但它是对
    意外标记
    错误的回答。因此,它可能有助于其他人解决这个问题

    SyntaxError: Unexpected token o in JSON
    
    当您忘记将
    wait
    关键字用于返回JSON数据的方法时,也会发生这种情况

    例如:

    async function returnJSONData()
    {
       return "{\"prop\": 2}";
    }
    
    var json_str = returnJSONData();
    var json_obj = JSON.parse(json_str);
    
    由于缺少
    等待
    ,将引发错误。实际返回的是
    承诺
    [对象],而不是
    字符串

    要解决此问题,只需按您的要求添加wait:

    var json_str = await returnJSONData();
    
    这应该很明显,但是错误是在
    JSON.parse
    上调用的,因此如果
    wait
    方法调用和
    JSON.parse
    调用之间有一定的距离,则很容易出错

    const getCircularReplacer = () => {
                  const seen = new WeakSet();
                  return (key, value) => {
                    if (typeof value === "object" && value !== null) {
                      if (seen.has(value)) {
                        return;
                      }
                      seen.add(value);
                    }
                    return value;
                  };
                };
    JSON.stringify(tempActivity, getCircularReplacer());
    

    其中,tempActivity正在处理数据,该数据产生错误“SyntaxError:JSON中位置1处的意外标记o-堆栈溢出”

    Aha,因此数据[0]。英语返回“bag”。看起来我根本不需要解析json文件。这很有趣。。我猜jquery猜测了数据类型并假设它是json。我认为getJson也可以工作,对吗?小提示:如果你
    json.parse
    一个对象,抛出“意外的标记o”仅仅是因为它试图解析
    obj_to_parse.toString()
    ,也就是
    [object object]
    。尝试
    JSON.parse('[object object]');
    ;)我也遇到过这种情况,我想我的错误是我试图解析到JSON,而JSON object已经是JSON ObjectjQuery,我猜不到。如果你不使用
    数据类型覆盖它(你为什么会这样做呢),它使用响应的
    Content-type
    HTTP头来确定它是什么类型的数据,并分析它是否是jQuery识别的数据。JSON.parse(“[{”english:“bag”,“kana:“kaban”,“kanji:“K”},{”english:“glasses”,“kana:“megane”,“kanji:“M”}”);工作正常。您是否尝试过用警报(数据)替换该行要检查文件是否正确加载?$.get可以在发送json时识别json,因此。
    var glacier=data;
    应该足够了。总结:您尝试解析它两次。另请参见我得到了类似的
    Uncaught语法错误:意外标记I
    ,因为Python编码
    json.dumps([float('inf'),float('nan')])=='[Infinity,nan]“
    好的,谢谢。奇怪的是,它有时似乎接收到已解析的json对象,有时却没有。我没有时间继续这个项目,所以我不知道它是否会随机执行此操作(取决于浏览器和系统或其他)。谢谢你的指点,我会记住的。请注意,任何投反对票的人,上面接受的答案包含