ajax进度条 php,ajax如何实现进度条的效果?

客户端发起一个ajax请求:

$("#data_container").load(server_url,{start_query_id:some_query_id});

要求服务器端需不断返回当前进度数据并返回至客户端,比如,客户端不断显示:当前查询的user_id是5,该用户信息是blahblahblah......

一开始我觉得很简单,ob_flush不就解决了嘛:

for($i=0;$i<100;$i++){

echo $i."

";

flush();

ob_flush();

sleep(2);

}

结果,还是过了很久,然后PHP才一次性全部输出。想问一下这个错在哪?

这样不行的话,只能用iframe加载了,iframe内嵌页面通过ob_flush()解决时时输出当前查询的效果,但理论上浏览器的加载条会一直处于转圈圈状态,不合适。

剩下的只能是用ajax每返回一次数据便重新再提交一次query_id的形式,页面要不停请求服务器,请求时间也大幅增加,也加大了服务器负担。

用websocket,暂且不讨论他的浏览器可怜的兼容性了,PHP天生就不是干websocket的料吧。

然后,就不知道咋办了,有没有比较简单而且友好的处理这种问题的方式?

回复内容:

客户端发起一个ajax请求:

$("#data_container").load(server_url,{start_query_id:some_query_id});

要求服务器端需不断返回当前进度数据并返回至客户端,比如,客户端不断显示:当前查询的user_id是5,该用户信息是blahblahblah......

一开始我觉得很简单,ob_flush不就解决了嘛:

for($i=0;$i<100;$i++){

echo $i."

";

flush();

ob_flush();

sleep(2);

}

结果,还是过了很久,然后PHP才一次性全部输出。想问一下这个错在哪?

这样不行的话,只能用iframe加载了,iframe内嵌页面通过ob_flush()解决时时输出当前查询的效果,但理论上浏览器的加载条会一直处于转圈圈状态,不合适。

剩下的只能是用ajax每返回一次数据便重新再提交一次query_id的形式,页面要不停请求服务器,请求时间也大幅增加,也加大了服务器负担。

用websocket,暂且不讨论他的浏览器可怜的兼容性了,PHP天生就不是干websocket的料吧。

然后,就不知道咋办了,有没有比较简单而且友好的处理这种问题的方式?

ob_flush()和ajax并不是你想象的那种效果。

iframe内嵌页面通过ob_flush()可以实现你要的,但是有你说的"转圈圈"。

前端设置定时器,不断发送ajax请求,这是目前通行的做法。

要想优化ajax,可以查一下Commet。

另外,建议你思考一下你是否真的想要在一个大批量的耗时的操作里,一点点的输出每一个用户的所有信息。

假进度条算法

完成进度条为100%

0 ~ 25% :随机递增 3% ~ 6% 每秒

25% ~ 65%:随机递增 0.1% ~ 3% 每秒

65% ~ 90%:随机递增 0.1% ~ 2% 每秒

90% ~ 99%:固定递增 0.5% 每秒

直到请求完成直接增长到100%

赞同 假进度条方法,我们以前就是这么干得。只要确保处理完毕后就是100%就行,中间速度爱咋咋地。

楼上说的假进度不错

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值