我如何在 fetch 调用中解析简单的 json 响应

Posted

技术标签:

【中文标题】我如何在 fetch 调用中解析简单的 json 响应【英文标题】:How can i parse simple json response in fetch call 【发布时间】:2019-11-17 19:23:17 【问题描述】:

我在获取响应中得到了简单的 json 对象。当我试图访问它时,它被捕获了。

this my reposnse

    "islogin": true




 fetch(url, data)
      .then(res => console.log(res);return res.json())
      .then(
        (result) => 
          console.log("rsult",JSON.stringify(result));
          console.log(result.islogin);
          console.log("1");
          console.log("authentication success");
        )
      .catch((error) =>  window.alert("error", error);
        console.log("authentication failed");
      );

我期望 result.islogin 为真/假。但它不会进入 then(result) 回调。

【问题讨论】:

那么,你在alert 中得到了什么(为什么不使用它来记录它呢?console.error)?因为如果它没有出现在你的 then 结果中,那么它应该进入你的 catch 中。 您的操作方式(从第一个 then 处理程序返回 res.json(),然后在第二个处理程序中使用解析的数据)是正确的。你有an unrelated error [编辑:实际上,它可能不是无关的],但你应该从你的第二个then 处理程序中看到正确的结果 if 返回的 JSON 确实如题。不相关(?)错误是您没有检查 HTTP 操作是否成功。 fetch API(在我看来)设计不佳,HTTP 错误是实现,而不是拒绝。 总是在您询问导致错误的内容时引用错误消息。 我可以在 chrome 中成功点击状态码为 200 的 url,但在 fetch 响应中显示状态码为“0”。我该如何解决这个问题。 【参考方案1】:
fetch(URL, 
    method: "POST", // "GET/POST"
    headers: 
        "Content-Type": "application/json"
    ,
    body: JSON.stringify(data)
)
.then(r => r.json())
.then(r => 
   console.log('Response', r) // You will get JSON response here.
).catch(error => console.error('Error', error))

我遇到了类似的问题,因为缺少 Content-Type 标头,有时是因为没有对请求有效负载进行字符串化。试试这段代码,看看它是否有效。以上是我用于我的项目的工作 sn-p。

【讨论】:

以上是关于我如何在 fetch 调用中解析简单的 json 响应的主要内容,如果未能解决你的问题,请参考以下文章

在使用 node-fetch 解析为 JSON 之前替换原始数据中的字符

如何在使用同构获取的异常处理承诺后解析 json

如何在本机反应中解析json数据

如何使用装饰器模式极大地增强fetch()

使用装饰器模式强大你的 fetch

Javascript - 如何知道Fetch API中的响应类型?