【问题标题】:How to decompress gzip xhr response in javascript如何在javascript中解压缩gzip xhr响应
【发布时间】:2013-03-23 11:38:58
【问题描述】:

我有一个来自 web 请求的 gzip 响应,我需要在 JavaScript 中解压缩(实际上,在 AJAX 调用的成功函数中 - 我的代码在无头浏览器中运行,并且没有内置 gzip完整浏览器提供的处理支持)。我一直在寻找答案,但我有点难过。

理想情况下,我想要的代码是:

var my_decompressed_string = someGzipDecompressor(xhr.responseText);

我发现,我认为是JavaScript implementation of Gzip 的答案,但这可能不是我希望的答案。尝试通过以下代码 sn-p

使用提到的 jsxcompressor 库时
var my_decompressed_string = JXG.decompress(xhr.responseText);

...我明白了...

TypeError: 'undefined' is not an object (evaluating '(new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(str))).unzip()[0][0]')

更详细地查看该函数,如果我分解 decompress() 函数正在执行的代码,我会得到我认为内部部分返回的好东西...

JXG.Util.Base64.decodeAsArray(xhr.responseText)

...但是undefined 为外部返回...

JXG.Util.Unzip( ... )

所以,这当然可能是一个死胡同,但如果有人知道我原来的问题应该是可能的方式,或者对 jsxcompressor.js 有更好的运气,我会很感激。

当然,我可以强制我的 AJAX 请求返回一个“放气”响应,但是页面的大小(我无法控制)非常大,请求 gzip 是为了加快我的页面加载时间.

【问题讨论】:

  • 首先要做的是将 xhr.responseText 转储到控制台,看看它是什么以及它的格式是什么
  • 所以响应被压缩了,但是你的浏览器没有透明地解压?为什么不呢?
  • 这就是我想知道的......我认为 OP 正在尝试压缩浏览器已经为他完成的事情......但它仍然无法解决“未定义”错误。查看数据请求/响应 Firebug Net 选项卡并检查返回的值和标头可能是这种情况下的起点。
  • 忘了提到我的代码在无头浏览器中运行,并且没有完整浏览器所具有的内置 gzip 处理支持:-/ 因此,必须自己做:- ) 压缩后的 xhr.responseText 的控制台输出是很多奇怪的字符。

标签: javascript ajax gzip compression


【解决方案1】:

jsxcompressor.js 需要base64编码的字符串来解压,你应该使用:

  var my_decompressed_string = JXG.decompress(btoa(xhr.responseText));

如果你的无头浏览器不支持 btoa,那么你应该使用 base64 编码库,如果你的 node 或 iojs 有很多 base64 npm 包。

【讨论】:

  • 非常感谢。我认为这是由于 base64 编码,但看不到在哪里/如何处理它。我几乎拥有它!
猜你喜欢
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 2012-12-02
相关资源
最近更新 更多