Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/474.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 转换的blob获取的文件格式不正确_Javascript_Angularjs_Excel - Fatal编程技术网

Javascript 转换的blob获取的文件格式不正确

Javascript 转换的blob获取的文件格式不正确,javascript,angularjs,excel,Javascript,Angularjs,Excel,我试图在下载空文件时向用户发送警报(在这种情况下,服务器会发回数字0: $http.get(service) .success(function (response) { if (response === parseInt(response, 10)) { alert("That query had no results"); $("#dialog").dialog("close");

我试图在下载空文件时向用户发送警报(在这种情况下,服务器会发回数字0:

$http.get(service)
        .success(function (response) {
            if (response === parseInt(response, 10)) {
                alert("That query had no results");
                $("#dialog").dialog("close");
            }                
            else {
                var blob = new Blob([response], { type: "application/vnd.ms-excel" });
                var objectUrl = URL.createObjectURL(blob);
                $("#dialog").dialog("close");
                window.location = objectUrl;
            }            
        });
该文件正在下载,但当我打开它时,我从excel收到一条“文件格式不正确消息”。我知道excel文件正在正常下载,因为:

window.location = service
很好用

我试过两种方法:

application/vnd.ms-excel
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
文件类型。两种都不起作用。提前谢谢

编辑:我认为可能需要获得原始响应(对于这个$http服务),所以我尝试:

http.get(service, {
            transformResponse:
                function (d, h) {
                    return d;
                }
        })
        .success(function (response) {
            ..same as above         
        });

但仍然不起作用。事实上,我在
d
上加了一个断点,看起来很多“无法识别”的字符都变成了问号(我将
d
与我的网络选项卡进行了比较。)在网络选项卡中,字符是单向的,但当我选中
d
时,它们已被更改为问号。

$http.get
返回的响应是一个包含标题的对象,您不能直接从中形成blob。您可以访问服务返回的二进制内容,如下所示:

var blob = new Blob([response.data], { type: "application/vnd.ms-excel" });