我正在尝试构建一个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-Ranges
和Content-Type
)实际上已设置,但Content-Length
不是。
为什么呢?如何设置Content-Length
标题?这会使剧本变得神奇吗?工作还是我还在黑暗中摸索制作进度指标?
答案 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,并在加载完成后显示数据。
我希望它有所帮助!