我知道这是一个常见的问题,但在获取数据时,我一直会遇到这样的错误:
SyntaxError: JSON.parse ()位置1处JSON中的意外标记u
这是在我测试我的完整代码时发生的,所以我用
res.send(JSON.stringify({"data": "test"}));
在我的客户端,我使用以下代码:
fetch(url) // fetch works
.then(checkStatus) // checks for errors, if none send response text
.then(function (responseText) {
let data = JSON.parse(responseText); // where I'm getting the error
在测试这些值时,服务器端的所有内容都会打印正确的值。但是,当我使用console.log在客户端打印responseText时,我得到如下信息:
F text() {本机代码}
为什么要调用此错误?通过查看堆栈溢出,我了解到当我试图解析未定义的字符串时会发生此错误。在要检查的解析是字符串未定义之前,我放置了一个if语句:
if (responseText === undefined) {
console.log("responseText is undefined");
}
但是它没有输出,所以字符串真的没有定义吗?另外,节点是最新的。谢谢你的helping.If这是在另一个问题中回答,请告诉我。我还没有找到解决这个问题的办法。
编辑:
function checkStatus(response) {
if (response.status >= 200 && response.status < 300) {
return response.text;
} else if (response.status === 404) {
clear();
return Promise.reject(new Error("Sorry, we couldn't find that page"));
} else {
console.log(response.text());
return Promise.reject(new Error(response.status + ": " + response.statusText));
}
}
编辑: response.text应该是response.text()。这让我犯了错误。
发布于 2019-03-19 18:19:52
更新以匹配新的问句代码
承诺链使用最后一个返回值解析每个新承诺。
您应该注意到,fetch()
API返回一个带有Response
对象的Promise
解析。这没有text
属性,因此checkStatus
使用undefined
进行解析(因此在错误消息中出现了"u“)。
我建议您使用Body.json()
方法解析JSON响应,即将checkStatus
更改为使用
if (res.ok) { // same as checking status between [200, 300)
return res.json()
}
if (res.status === 404) {
clear()
return Promise.reject(new Error("Sorry, we couldn't find that page"))
}
// text(), like json() returns a promise
return res.text().then(responseText => {
console.error(responseText)
return Promise.reject(new Error(`${res.status}: ${res.statusText}`))
})
而对于fetch()
..。
fetch(url)
.then(checkStatus)
.then(data => {
// data is already parsed into an object
})
在服务器端,您可能希望使用res.json()
而不是手动调整数据。
res.json({ data: 'test' })
https://stackoverflow.com/questions/55252556
复制