PHP - 显示已加载的百分比

时间:2014-08-04 09:55:09

标签: php ajax progress

我一直在寻找和操纵一些xhr ajax的东西,但我仍然没有找到任何解决方案。

我所拥有的是在jQuery中用AJAX加载的内容。 我想要做的是显示一个百分比加载器。我已经为beforeSend设置了一个加载图标,但由于我有很多数据(文本),我的客户认为它被卡住了......

我已经尝试thisand this,但它只显示已加载所有内容的百分比(因此显示100%),但这是因为之间的通信我想客户端服务器并不持久。

有没有办法使用PHP和jQuery来做到这一点?如果没有,我该怎么做?

这是我的代码:

$.ajax({
    url: ajax_var.url,
    type: 'POST',
    data: dataString,
    beforeSend: function() {
        $("#loader").html("<i class='loading icon'></i> Loading...");
    },
    success: function(data) {
        $("#loaded_data").html(data);
    },
    error: function(e) {
        console.log(e);
    }
});

由于

1 个答案:

答案 0 :(得分:1)

简短的回答是 - 不。答案很长 - 是的,但只有你做了很多的工作并且你了解幕后发生的事情。

AJAX通过HTTP工作,我们知道HTTP是无状态协议。这意味着一旦你要求某些东西,你就会得到它。无论它的大小。你没有得到这样的响应,你可以计算出有多少数据(服务器必须告诉content-length是什么)。

换句话说,无论响应是1个字符还是1TB数据,它都被视为相同。您要求它,直到它回来 - 您无法与数据交互。这就是为什么你不能为单个请求显示任何类型的进度条的原因,这就是为什么它只在100%加载后出现。您可以显示加载图标,并在所有内容到达后将其删除,就是这样。

此问题的解决方案在于执行多个请求。工作流程的一个例子是:

  • 询问服务器内容的长度
  • chunk the content。如果您传输的文本长度为10KB,则将内容分成10个块
  • 向服务器询问每个块
  • 每个内容块代表10%
  • 当块到达时,以相同的百分比增加加载器
  • 数据到达后,将其合并并显示给用户

(注意 - 10KB示例用作示例来解释原理,它绝不是任何形式的建议,将10kb的数据分成10个请求,每个1kb)。

这种方法的缺点当然是,你通过发出多个请求来强调服务器,并且你依靠客户端将数据“组装”成有意义的东西。

还有其他方法,但如果你需要AJAX和普通的旧jQuery - 你没有很多选择。