XMLHttpRequest的responseType属性接受多个值

时间:2015-10-14 19:40:21

标签: javascript angularjs excel http-headers httpresponse

我的情况是$ 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;}
                    })()

responseType documentation

2 个答案:

答案 0 :(得分:1)

我们在项目中所做的是使用名为“ajax”的包装超过$ http ,在此服务中我们提供额外的参数来获取/发布/调用/放置调用类型使用内容类型增强标题(在您的情况下)仅针对该特定请求。该服务当然提供默认值(最常见的ajax调用标头)。

答案 1 :(得分:0)

我将responseType保持为arraybuffer,并在输出target = html时将缓冲区转换为字符串。

var decodingString = String.fromCharCode.apply(null,new Uint8Array(buf));