' Content-Length的'标头未传递到标头

时间:2016-04-30 12:56:21

标签: php jquery ajax http-headers

我正在尝试构建一个Phonegap应用,该应用在加载从MySQL数据库中查询过的JSON数据时显示进度指示器。我确实通过my self从远程服务器处理了Ajax加载部分,但现在我无法找到进度指示器部分的出路。

经过大量的搜索,我正在努力工作this script。目前,脚本对我不起作用,因为lengthComputable是错误的。

我读到lengthComputable是由需要(或可以)由PHP设置的标题给出的,如下所示:

ob_start();

// Code...

$length = ob_get_length();
header('Content-type: text/html;charset=utf-8');    
header('Access-Control-Allow-Origin: *');
header('Content-Length: '.$length."\r\n");
header('Accept-Ranges: bytes'."\r\n");

使用Firebug我注意到我设置的所有标头(例如Access-Control…Accept-RangesContent-Type)实际上已设置,但Content-Length不是。

enter image description here

为什么呢?如何设置Content-Length标题?这会使剧本变得神奇吗?工作还是我还在黑暗中摸索制作进度指标?

2 个答案:

答案 0 :(得分:1)

您的Firebug屏幕截图显示您已将Transfer-Encoding设置为chunked。这通常意味着内容在生成时流式传输给用户,而不是一次性流式传输。在此模式下,您无法使用Content-Length。大概你的服务器正在剥离不允许的标题。

您可能能够重新配置服务器而不是流式传输响应,但最简单的解决方案是添加不同的标头,例如X-Filesize并从中计算进度。它可能不会使用Phonegap的自动进度计算。

您可能能够找到一种在分块编码服务器上获取Content-Length标头的方法。的唐'吨即可。违反HTTP标准可能会在一个特定的场景中起作用,但会引起各种各样的问题。

答案 1 :(得分:-1)

这可能不是最好的导师,但我找到了一个简单的解决方案。

找一个你喜欢的加载的gif,例如,让我们说一下:

http://sierrafire.cr.usgs.gov/images/loading.gif

获取gif并将其放入您希望加载数据的div /字段中。

例如:

<div id="data"><img src='http://sierrafire.cr.usgs.gov/images/loading.gif' alt="loading" /></div>

在你执行的jQuery代码中:

$(document).ready(function(){
    $.get( "/url/you/load/from", function( data ) {
      $("#data").stop().fadeOut(0).fadeIn("10").html(data);
    });
});

这将覆盖加载程序gif,并在加载完成后显示数据。

我希望它有所帮助!