Javascript 我不断地得到;未捕获的语法错误:意外标记“o”;
我正在努力学习一些html/css/javascript,所以我正在给自己写一个教学项目 其想法是在json文件中包含一些词汇表,然后将其加载到表中。我设法装入文件并打印出其中一个值,然后开始编写代码将值装入表中 这样做之后,我开始出现错误,所以我删除了所有我编写的代码,只剩下一行(与以前的代码相同)。。。只有错误还在那里 错误如下:Javascript 我不断地得到;未捕获的语法错误:意外标记“o”;,javascript,jquery,json,Javascript,Jquery,Json,我正在努力学习一些html/css/javascript,所以我正在给自己写一个教学项目 其想法是在json文件中包含一些词汇表,然后将其加载到表中。我设法装入文件并打印出其中一个值,然后开始编写代码将值装入表中 这样做之后,我开始出现错误,所以我删除了所有我编写的代码,只剩下一行(与以前的代码相同)。。。只有错误还在那里 错误如下: Uncaught SyntaxError: Unexpected token o (anonymous function)script.js:10 jQuery.
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对象,有时却没有。我没有时间继续这个项目,所以我不知道它是否会随机执行此操作(取决于浏览器和系统或其他)。谢谢你的指点,我会记住的。请注意,任何投反对票的人,上面接受的答案包含