【发布时间】:2017-03-22 17:24:49
【问题描述】:
fetch() 返回承诺(如果成功)解析为 Response 对象。一个很常见的做法是立即调用 Response.json() 将响应正文转换为 JSON 对象。
如果响应正文不是有效的 JSON,则 Response.json() 承诺会失败并出现错误。消息大致如下:
JSON 中位置 0 处的意外标记 X
这在尝试诊断问题时不是很有帮助;理想情况下,我希望能够看到来自服务器的内容(这通常是一条错误消息)。
但是,您似乎只能在Response.body 读取流一次(至少在 Chrome 中)。 (甚至还有一个只读的 Response.bodyUsed 标志。)Response.json() 尝试将正文转换为 JSON 时已经发生了这种情况,因此如果 JSON 解析失败,正文似乎会永远丢失。
有没有办法恢复原始响应正文...当原始fetch Promise 解析时,除了手动读取它(然后转换为 JSON)之外?
【问题讨论】:
-
您可以调用
response.text()来读取返回的数据,即使它不是有效的 JSON,也可以克隆响应,但理想情况下,您的服务器应该始终在以下情况下返回 JSON你期望 JSON,即使是错误也应该返回为 JSON。
标签: javascript json stream fetch httpresponse