Angular 2请求返回XSD文件时解析响应出现HttpErrorResponse报错
排查并解决Http GET请求获取XSD文件的SyntaxError问题
咱们一步步拆解问题,从明显的代码错误到核心配置问题来修复:
1. 先解决低级变量错误
看你的map操作里,最后返回的是content,但这个变量根本没声明或赋值啊!你应该返回前面定义的data(或者直接返回response),这个错误会直接触发运行时异常,先把这个改过来:
.map((response: Response) => { let data: any = response; return data; // 把content改成data })
2. 核心问题:responseType放错位置了!
这是导致SyntaxError的关键:在Angular的Http请求配置里,responseType不属于HTTP请求头,你不该把它加到headers里,而是要作为请求配置对象的单独属性。如果放在headers里,Angular还是会默认按JSON解析返回的XSD文本,而XSD不是JSON格式,自然会触发解析错误。
3. 优化不必要的请求头
- GET请求不需要设置
Content-Type,这个头是用来标识请求体的类型,GET没有请求体,完全可以删掉。 Accept头设置成application/xml或text/xml更贴合XSD文件的类型,比application/octet-stream更合理,服务器也能更准确地返回对应格式的内容。
修正后的完整代码
// 构建只包含必要字段的请求头 const headers = new HttpHeaders().append('Accept', 'application/xml'); return this.http.get( data[0]._links['http://identifiers.emc.com/content-download'].href, { headers: headers, responseType: 'text' // 单独配置responseType,告诉Angular返回文本格式 } ) .map((response: Response) => { return response; // 直接返回response即可,无需额外赋值 });
额外适配:如果用Angular HttpClient(4.3+)
如果你的项目用的是较新的HttpClient,写法可以更简洁,HttpClient会自动根据responseType处理返回值:
const headers = new HttpHeaders().append('Accept', 'application/xml'); return this.http.get( data[0]._links['http://identifiers.emc.com/content-download'].href, { headers: headers, responseType: 'text' as 'text' // 部分版本需要加类型断言 } );
这样修改后,应该就能正常获取XSD文件内容,不会再触发SyntaxError了。
内容的提问来源于stack exchange,提问作者Divya Neelaiah
相关产品推荐
相关产品推荐

