edm*_*ond 4 httpclient angular
我是 angular 的新手,我一直在努力弄清楚如何下载一个文件,在我的例子中是一个 pdf 文件。这是我得到的错误:
Http failure during parsing for https://url...
Run Code Online (Sandbox Code Playgroud)
在浏览器的调试控制台中也是一个错误:
SyntaxError: Unexpected token % in JSON at position 0 at JSON.parse
Run Code Online (Sandbox Code Playgroud)
其实我正在下载一个pdf文件。这是我的 http 调用的样子:
protected get<T>(url: string, params: any, defaultResult: T): Observable<T> {
return this.httpClient.get<T>(url, {
headers: myHeader,
params: params
})
.pipe(catchError(this.handleError(defaultResult))
);
Run Code Online (Sandbox Code Playgroud)
} 如何
由于您要传回一团数据而不是 JSON,但不让 httpclient 知道如何解析它,因此 angular 试图将响应解析为 JSON,这是默认路径。
这是来自angular网站的文档:
request(first: string | HttpRequest<any>, url?: string, options: {
body?: any;
headers?: HttpHeaders | {
[header: string]: string | string[];
};
observe?: HttpObserve;
params?: HttpParams | {
[param: string]: string | string[];
};
reportProgress?: boolean;
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
withCredentials?: boolean;
} = {}): Observable<any>
Run Code Online (Sandbox Code Playgroud)
响应类型:
除了配置请求参数(例如传出标头和/或正文)之外,选项哈希还指定了有关请求的两个关键信息:responseType 和要观察的内容。responseType 值确定如何解析成功的响应正文。如果 responseType 是默认 json,则结果对象的类型接口可以作为类型参数传递给 request()。
所以在你的情况下尝试:
protected get<T>(url: string, params: any, defaultResult: T): Observable<any> {
return this.httpClient.get(url, {
headers: myHeader,
params: params,
responseType: 'blob'
})
.pipe(catchError(this.handleError(defaultResult))
);
Run Code Online (Sandbox Code Playgroud)
更多信息:
类似的问题 Angular HttpClient "Http failure during parsing"
| 归档时间: |
|
| 查看次数: |
10789 次 |
| 最近记录: |