2

我正在尝试从动作控制器获取一个 zip 文件(或一个字节数组)并将其解压缩到 javascript 中。目的是节省时间,因为我要下载的数据量非常大。

这是返回数据的动作控制器:

    public FileContentResult GetKML()
    {
        byte[] strResult = GetZippedDataWithDotNetZip();
        return File(strResult, "application/zip", "test.zip");
    }

我在 javascript 中调用该控制器操作:

$.post('Home/GetKML', {}, function (data) {
    var info = unzip(data);
});

问题是控制器操作返回undefined。为什么?

4

1 回答 1

1

问题可能是由于 jquery 的 ajax 函数只处理 xml、html、脚本、json、jsonp 和文本的响应类型(我还没有验证过,但它是基于我之前的经验)。您正在从您的操作中返回二进制数据,他们无法处理这些数据。

我强烈怀疑控制器操作是否返回“未定义”,因为这是一个 javascript 习惯用法。您可能只是尝试对返回值执行 console.log 并看到“未定义”,在这种情况下,您正在查看 jquery 无法处理 Action 输出的最终结果。如果您使用 Firefox 和 Firebug 查看来自 ajax 请求的实际响应,您将获得更好的故障排除信息。

这回答了“为什么?” 在你的问题中,我相信。

如果您想要一些额外的选项,并且根据您的回答,我认为您会这样做,因为您非常关注性能并且对使用已经支持的基础架构不感兴趣,该基础架构可用于透明地启用您的性能增强类型想要做(即 gzip 压缩),非常欢迎您推出自己的 jquery 插件来处理从服务器返回的二进制数据并执行您想要的任何操作。您对自我实现的性能增强的渴望使我怀疑您是否愿意并且能够深入研究 jquery 文档来实现这一目标。或者如果失败了,为什么不以自己的方式重新实现 jquery 功能以支持 zip 数据的提取呢?

另一种选择是将压缩文件作为 mime 编码字符串发回,这当然会使压缩文件的用处无效。但是,话又说回来,您可以启用 gzip 压缩,毕竟它会被压缩。

于 2013-03-06T21:25:08.670 回答