相关疑难解决方法(0)

如何在XHR onProgress函数中使用缩减/ gzipped内容?

我之前看到过一些类似的问题,但我还没有找到一个完全描述我当前问题的问题,所以这里有:

我有一个页面,通过AJAX加载一个大的(介于0.5和10 MB之间)JSON文档,以便客户端代码可以处理它.加载文件后,我没有任何我不期望的问题.但是,下载需要很长时间,因此我尝试利用XHR Progress API呈现进度条,以向用户指示文档正在加载.这很好用.

然后,为了加快速度,我尝试通过gzip和deflate压缩服务器端的输出.这也很有效,但是,我的进度条停止了工作.

我已经研究了一段时间的问题,发现如果Content-Length没有使用请求的AJAX资源发送正确的头文件,onProgress事件处理程序就无法按预期运行,因为它不知道它在下载中有多远.发生这种情况时,lengthComputablefalse在事件对象上设置一个名为call的属性.

这是有道理的,所以我尝试使用未压缩和压缩的输出长度显式设置标头.我可以验证是否正在发送标头,我可以验证我的浏览器知道如何解压缩内容.但onProgress处理程序仍然报告lengthComputable = false.

所以我的问题是:有没有办法使用AJAX Progress API来压缩/缩小内容?如果是这样,我现在做错了什么?


这是资源在Chrome网络面板中的显示方式,表明压缩正在运行:

网络面板

这些是相关的请求标头,显示请求是AJAX并且Accept-Encoding设置正确:

GET /dashboard/reports/ajax/load HTTP/1.1
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.99 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Run Code Online (Sandbox Code Playgroud)

这些都是相关的响应报头,显示出Content-LengthContent-Type被正确设置:

HTTP/1.1 200 …
Run Code Online (Sandbox Code Playgroud)

javascript compression jquery xmlhttprequest

42
推荐指数
2
解决办法
2万
查看次数

标签 统计

compression ×1

javascript ×1

jquery ×1

xmlhttprequest ×1