繁体   English   中英

JSON中位置1处的意外令牌u

[英]Unexpected token u in JSON at position 1

我知道这是一个常见的问题,但是在获取数据时却不断出现此错误:

SyntaxError:JSON中意外的令牌u在JSON.parse()的位置1

这是在我测试完整代码时发生的,因此我使用

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");
}

但是它没有输出,所以字符串真的不确定吗? 附带说明,节点是最新的。 感谢您的帮助。如果在另一个问题中回答了此问题,请告诉我。 我尚未找到解决此问题的方法。

编辑:

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()。 这给了我我的错误。

更新以匹配新的问题代码

一个承诺链使用上一个的返回值来解析每个新的承诺。

您应该注意, 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' })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM