【问题标题】:getting Fetch response data获取 Fetch 响应数据
【发布时间】:2022-03-16 22:21:07
【问题描述】:

我正在使用 chrome devTools 来镜像 webRequest。查看网络请求,响应中有一些我想要访问的 JSON 数据

右键 --> 复制为 fetch -->

fetch(
    "https://www.url.com/service.svc?action=FindConversation&ID=-40&AC=1",
    {
        "credentials":"include",
        "headers":{
            "accept":"*/*",
            "accept-language":"en-US,en;q=0.9",
            "action":"FindConversation",
            "content-type":"application/json; charset=UTF-8",
            "actionid":"-40",
            "unique_identifier":"062lCufCY0i5mI9NMTRUsF87XDq9ttYIonzZQjBcCOPvzoIJFOTSI6ZVNK9lMwy_iPFY2tuZzPY."
            "x-requested-with":"XMLHttpRequest"
        },
        "referrer":"https://ballard.amazon.com/OWA/",
        "referrerPolicy":"no-referrer-when-downgrade",
        "body":"contains some body data I want to manipulate",
        "method":"POST",
        "mode":"cors"
    }
).then(res => {console.log(res)})

这会打印出如下内容:

Response {type: "basic", url: "https://url/service.svc?action=FindConversation&ID=-40&AC=1", redirected: false, status: 200, ok: true, …}
body: ReadableStream
locked: false
__proto__: ReadableStream
bodyUsed: false
headers: Headers {}
ok: true
redirected: false
status: 200
statusText: "OK"
type: "basic"
url: "https://url/OWA/service.svc?action=FindConversation&ID=-40&AC=1"
__proto__: Response

当我检查我刚刚发出的网络请求时,它似乎没有返回任何 JSON 数据,而是以 200 代码响应。这正常吗?

我要么期望它返回 JSON 数据,要么失败。

另外,res 中的 JSON 响应数据在哪里?

【问题讨论】:

  • fetch 返回一个解析为请求的 Promise。在请求上调用.json(),它将返回一个解析为对象的 Promise。
  • 扩展 @zero298 提到的内容:.then(response => response.json()) .then(data => console.log(JSON.stringify(data))) 是两个承诺的样子。

标签: javascript fetch-api


【解决方案1】:

这是正常行为。 fetch() 返回一个 stream 对象,而不仅仅是正文。

使用res.json() 提取 JSON 内容。 对于非 JSON 响应,请使用 res.text()

【讨论】:

  • 如果它的 HTML 在返回中?
  • @MorganAllen OP 需要 JSON 响应。对于 HTML 或非 JSON 正文,请使用 .text()
  • @MorganAllen 抱歉,我没有注意到。很高兴我帮助了?
猜你喜欢
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多