我的情况是$ http reponseType依赖于url查询参数。当output-target = html并且我根本不提及responseType时,我能够正确地获得html中的响应。 但是当output-target = xls时,我需要这样做才能使它工作 并将responseType设置为arraybuffer(to get response in excel)
var blob = new Blob([data],{type:" application / vnd.ms-excel"});
$http({
method: 'GET',
url: "https://xyz/abc?output-target=" + $scope.outputTarget,
headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Accept': '*/*'},
responseType: arraybuffer //for $scope.outputTarget=xls
})
我需要能接受各种响应类型的东西。如果该选项不可用,那么该怎么办?
我也尝试将函数传递给responseType,但这也没有用。
responseType: (function () {
if($scope.outputTarget === "table/excel;page-mode=flow") {
var arraybuffer
return arraybuffer;
} else {return;}
})()
答案 0 :(得分:1)
我们在项目中所做的是使用名为“ajax”的包装超过$ http ,在此服务中我们提供额外的参数来获取/发布/调用/放置调用类型使用内容类型增强标题(在您的情况下)仅针对该特定请求。该服务当然提供默认值(最常见的ajax调用标头)。
答案 1 :(得分:0)
我将responseType保持为arraybuffer,并在输出target = html时将缓冲区转换为字符串。
var decodingString = String.fromCharCode.apply(null,new Uint8Array(buf));