该错误
Unexpected token ... in JSON at position1实际上意味着已将
JSON.parse其应用于无效的JSON-随机字符串或强制转换为字符串的值根本不是字符串的值。
该消息
Unexpected token o ...暗示解析的值很可能是对象-被强制转换为
[object ...]字符串。
问题在这里清楚可见:
Response body: ReadableStream locked: true __proto__: Object bodyUsed: true ...
此处的响应对象是全局
Response构造函数的实例(Fetch
API的一部分),而是否存在
ReadableStream清楚地表明了这一点。
在Fetch
polyfill中可以看到,所有这些
res.json()都适用
JSON.parse于某些值
this.json = function() { return this.text().then(JSON.parse)}这很可能
new ResponseOptions是错误地提供给全局
Response构造函数的对象,因此发生了错误。
Angular具有类似名称的
Response类,该类从Fetch派生其接口,
Response但显然不兼容。问题在于它从未被导入过,因此使用了global
Response来代替。
怎么修
它应该是
import { Response, ResponseOptions, ... } from '@angular/http';如何预防
全局变量在Typescript类型定义中声明,不能取消声明,但可以在自定义类型定义中重新声明:
定制文件
declare var Headers: undefined;declare var Request: undefined;declare var Response: undefined;declare var URLSearchParams: undefined;
使用全局变量而不是导入的同名Http类将导致类型错误:
TS2532:对象可能是“未定义”。
只要在Angular应用程序中未使用Fetch API,这就是理想的行为。
这不是 在Angular 4.3 HttpClient
中替换的问题,Http
并且不使用与Fetch API相同名称的类。



