PHP-显示加载的百分比

PHP-显示加载的百分比,php,ajax,progress,Php,Ajax,Progress,我一直在搜索和处理一些XHRAjax的东西,但我仍然没有找到任何解决方案 我拥有的是一个在jQuery中用AJAX加载的内容。 我想做的是显示一个百分比加载器。我已经在发送前设置了一个加载图标,但是由于我有很多数据(文本),我的客户认为它卡住了 我已经试过了,但它只显示所有内容都已加载时的百分比(因此它显示100%),但我想这是因为客户机-服务器之间的通信不是持久的 有没有一种方法可以使用PHP和jQuery实现这一点?如果没有,我怎么做 这是我的密码: $.ajax({ url: aj

我一直在搜索和处理一些XHRAjax的东西,但我仍然没有找到任何解决方案

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

我已经试过了,但它只显示所有内容都已加载时的百分比(因此它显示
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);
    }
});
$.ajax({
url:ajax_var.url,
键入:“POST”,
数据:dataString,
beforeSend:function(){
$(“#加载程序”).html(“加载…”);
},
成功:功能(数据){
$(“#加载的#数据”).html(数据);
},
错误:函数(e){
控制台日志(e);
}
});

谢谢

简短的回答是-不。长的回答是-是的,但前提是你做了大量的工作,并且你了解幕后的情况

AJAX在HTTP上工作,我们知道HTTP是无状态协议。这意味着,一旦你提出要求,你就会得到回报。不管它的大小。您无法通过计算数据量的方式获得响应(服务器必须告诉您
内容长度是多少)

换句话说,无论响应是1个字符还是1TB的数据,处理方式都是一样的。您需要它,直到它回来-您无法与数据交互。这就是为什么不能为单个请求显示任何类型的进度条,这就是为什么它只有在100%加载后才会显示。您可以显示加载图标,并在所有内容到达后将其删除,仅此而已

这个问题的解决方案在于执行多个请求。工作流的一个示例如下:

  • 向服务器询问内容的长度
  • 将内容分块。如果要传输的文本长度为10KB,请将内容分成10个块
  • 向服务器请求每个块
  • 每块内容占10%
  • 当块到达时,将加载程序增加相同的百分比
  • 数据到达后,将其合并并显示给用户
(注意——10KB的例子只是解释原理的一个例子,将10KB的数据分为10个1kb的请求绝非任何形式的建议)

当然,这种方法的缺点是,您通过发出多个请求给服务器带来压力,并且依赖客户端将数据“组装”成有意义的内容


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

您可以检查;我已经试过了。它只显示所有内容都已加载时的百分比。是的,这也是我想要做的。我想我会忘记这个想法,在发送前将加载图标留在
上。谢谢你的详细回答。根据我个人的经验,实现某种类型的加载程序和超时已经足够了,这样你就可以在出现问题时通知用户。如果您使用async jquery$.ajax,人们可以继续使用您的应用程序,而不需要整个过程阻塞和显示加载程序图标。当然,这需要更多的工作,但仍然有办法:)