gpt4 book ai didi

angularjs - AngularJS 可以在收到响应后设置 responseType 吗?

转载 作者:行者123 更新时间:2023-12-03 08:20:50 25 4
gpt4 key购买 nike

我有一个 Angular 1.x 应用程序,它希望使用 $http.post() 接收二进制文件下载 (pdf)称呼。问题是,我想或者获得作为 json 发送的处理错误消息。我可以用配置做到这一点

headers: {
'Accept': 'application/pdf, application/json'
}

问题是我必须设置 responseType: 'arraybuffer' , 否则 pdf 二进制文件将被转义(或更改以使其无法加载)。但是,这会阻止正确读取或解释 json。

我怎么能两者兼得?

编辑:我将尝试澄清;也许我的理解是不正确的。
$http({
method: 'POST',
url: "/myresource",
headers: {
'Accept': 'application/pdf, application/json'
},
responseType: 'arraybuffer'
})
.then(
function(response) {
// handle pdf download via `new Blob([data])`
}, function(response) {
// pop up a message based on response.data
}
)

在我返回 pdf 数据块和 200 的 http 状态的场景中,第一个函数处理响应并提示用户保存文件。但是,如果状态为错误 (422),则 response.data未定义。我认为这是因为 responseType阻止正确处理 json。

如果我删除 responseType行,错误数据被正确读取,但是当保存 pdf 时,某些文件字节不正确并且实际上已损坏。我认为这是因为文件正在被编码,因为 javascript 需要一个字符串。

最佳答案

安XHR responseType加载响应后无法更改属性。但是一个 arraybuffer可以根据 Content-Type 进行解码和解析:

 var config = {
responseType: "arraybuffer",
transformResponse: jsonBufferToObject,
};

function jsonBufferToObject (data, headersGetter, status) {
var type = headersGetter("Content-Type");
if (!type.startsWith("application/json")) {
return data;
};
var decoder = new TextDecoder("utf-8");
var domString = decoder.decode(data);
var json = JSON.parse(domString);
return json;
};

$http.get(url, config);

上面的例子设置 XHR 返回一个 arraybuffer并使用 transformResponse检测功能 Content-Type: application/json并在必要时进行转换。

DEMO on PLNKR

关于angularjs - AngularJS 可以在收到响应后设置 responseType 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40919572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com