【问题标题】:'Content-Length' header is not passed to headers'Content-Length' 标头未传递给标头
【发布时间】:2016-08-25 14:37:47
【问题描述】:

我正在尝试构建一个 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 标头?这会使脚本“神奇”地工作还是我仍在黑暗中摸索以制作进度指示器?

【问题讨论】:

    标签: php jquery ajax http-headers


    【解决方案1】:

    这可能不是最好的答案,但我为您提供了一个简单的解决方案。

    找一张你喜欢的加载动图,比如说这个:

    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 并在加载完成后显示数据。

    希望对你有帮助!

    【讨论】:

    • 感谢您的建议,但我真的想在加载时显示数据的真实百分比。我希望用户知道它需要等待多少时间以及加载过程的时间点。
    【解决方案2】:

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

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

    您也许能够找到一种在分块编码服务器上获取 Content-Length 标头的方法。 不要。违反 HTTP 标准可能在一种特定情况下有效,但会导致各种问题。

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2018-04-06
      • 2012-06-12
      相关资源
      最近更新 更多