【问题标题】:Http failure for getting base64 string获取 base64 字符串的 Http 失败
【发布时间】:2021-05-04 22:09:40
【问题描述】:

这是我的代码:

getPhoto(employeeId: string): Observable<any[]> {
    const headers = new HttpHeaders({
      'responseType': 'json'
    })

    const url = `/Emps/GetPhoto`;
    const params = new HttpParams({
      fromObject: { employeeId },
    });
    return this.http.get<any[]>(url, { params, headers });
  }

这就是该方法返回的内容:

data:image/svg;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDY4ID ...

该方法返回成功 200,但是在控制台中我得到 SyntaxError: Unexpected token d in JSON at JSON.parse () at XMLHttpRequest.onLoad 的位置 0,并且永远不会命中 getPhoto 订阅调试器。我做错了什么?

【问题讨论】:

  • 您收到该错误是因为响应不是有效的 json 对象

标签: javascript angular typescript


【解决方案1】:

Angular HttpClient 的 GET 方法的 default response typejson。尝试明确设置响应类型

return this.http.get<any[]>(url, { params, headers }, responseType: 'text' });

如果更适合您的要求,您也可以使用blobarraybuffer。它的类型定义如下

responseType?: 'arraybuffer'|'blob'|'json'|'text'

更新1:将responseType推到options对象之外

【讨论】:

  • return this.http.get(url, { params, responseType: 'text' });如果我这样做,我会收到语法错误 Type 'Observable' is not assignable to type 'Observable'.
  • @petko_stankoski:您期望的是any 的数组,而响应不是。尝试将返回类型更改为getPhoto(employeeId: string): Observable&lt;any&gt;
  • 我仍然得到错误:没有重载匹配这个调用。重载 1 的 15, '(url: string, options: { headers?: HttpHeaders | { [header: string]: string | string[]; }; 观察: "events"; params?: HttpParams | { [param: string ]: string | string[]; }; reportProgress?: boolean; responseType?: "json"; withCredentials?: boolean; }): Observable<...>',给出以下错误。类型“文本”不能分配给类型“json”。
  • @petko_stankoski:那是我的错误。重载定义中显示的responseType 应该位于options 对象之外。我已经更新了答案。请看看它现在是否有效。
  • 另一个错误:找不到名称'responseType'.ts
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 2021-10-15
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多