尝试从服务器返回一些JSON代码,以便我可以在JavaScript中操作它。
但是我收到以下错误:
未捕获的SyntaxError:位于10的JSON中的意外标记m
这是我的代码:
getJSON(url, success) {
let query = [ 'cars', 'vans', 'bikes' ];
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
success(JSON.parse(xhr.responseText));
} else {
exit(xhr.responseText);
}
}
};
xhr.open('GET', url);
xhr.send();
}
这是我得到的响应,如果我只是在{。{}}:
上调试.logxhr.responseText
答案 0 :(得分:1)
您尝试解析的对象是有效的JavaScript对象,但不是有效的JSON。
key
应为字符串,定义为
一系列零个或多个Unicode字符,用双引号括起来,使用反斜杠转义
您不应使用任何尾随逗号(请参阅Can you use a trailing comma in a JSON object?)。
对象的正确JSON字符串应为:
let s = '[ {"make": "VOLVO"}, {"make": "AUDI"}, {"make": "VOLKSWAGON"} ]';
可以修复代码以检测此问题:
getJSON(url, success) {
let query = [ 'cars', 'vans', 'bikes' ];
let xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
try {
let parsedJSON = JSON.parse(xhr.responseText);
success(parsedJSON);
} catch (e) {
if (e instanceof SyntaxError === true) {
// Problem with the format of the JSON string.
} else {
// Other error
}
}
} else {
exit(xhr.responseText);
}
}
};
xhr.open('GET', url);
xhr.send();
}
混杂。资源: