我一直在寻找和操纵一些xhr ajax的东西,但我仍然没有找到任何解决方案。
我所拥有的是在jQuery中用AJAX加载的内容。
我想要做的是显示一个百分比加载器。我已经为beforeSend
设置了一个加载图标,但由于我有很多数据(文本),我的客户认为它被卡住了......
我已经尝试this,and 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);
}
});
由于
答案 0 :(得分:1)
简短的回答是 - 不。答案很长 - 是的,但只有你做了很多的工作并且你了解幕后发生的事情。
AJAX通过HTTP工作,我们知道HTTP是无状态协议。这意味着一旦你要求某些东西,你就会得到它。无论它的大小。你没有得到这样的响应,你可以计算出有多少数据(服务器必须告诉你content-length
是什么)。
换句话说,无论响应是1个字符还是1TB数据,它都被视为相同。您要求它,直到它回来 - 您无法与数据交互。这就是为什么你不能为单个请求显示任何类型的进度条的原因,这就是为什么它只在100%加载后出现。您可以显示加载图标,并在所有内容到达后将其删除,就是这样。
此问题的解决方案在于执行多个请求。工作流程的一个例子是:
(注意 - 10KB示例用作示例来解释原理,它绝不是任何形式的建议,将10kb的数据分成10个请求,每个1kb)。
这种方法的缺点当然是,你通过发出多个请求来强调服务器,并且你依靠客户端将数据“组装”成有意义的东西。
还有其他方法,但如果你需要AJAX和普通的旧jQuery - 你没有很多选择。