您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/11/28 6:41:24发布19次查看
客户端发起一个ajax请求:
$(#data_container).load(server_url,{start_query_id:some_query_id});
要求服务器端需不断返回当前进度数据并返回至客户端,比如,客户端不断显示:当前查询的user_id是5,该用户信息是blahblahblah......
一开始我觉得很简单,ob_flush不就解决了嘛:
for($i=0;$iecho $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;$iecho $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%就行,中间速度爱咋咋地。
楼上说的假进度不错
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product