You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:19:57