XMLHttpRequest 的 responseType 属性 接受多个值

responseType property of the XMLHttpRequest to accept multiple values

我遇到 $http reponseType 依赖于 url 查询参数的情况。当 output-target=html 并且我根本不提及 responseType 时,我能够在 html 中正确获得响应。 但是,当 output-target=xls 时,我需要这样做才能使其工作 并将 responseType 设置为 arraybuffer (to get response in excel)

var blob = new Blob([数据], {类型: "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

我们在该项目中所做的是在 $http 上创建一个名为 "ajax" 的 包装器,并且在该服务中我们为 get/post/call/put 类型的调用和 使用 Content-Type 增强 headers(在您的情况下)仅针对特定请求。该服务当然提供默认值(最常见的 ajax 调用 headers)。

当输出目标 = html.

时,我将 responseType 保持为 arraybuffer 并将缓冲区转换为字符串

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