【发布时间】: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