has*_*ams 8 javascript php ajax progress-bar
我想知道如何像gmail一样制作进度条.
我试过了
<script src="jquery.js"></script>
<script>
$(function (){
$.ajax({
url: 'index.php',
success: function(data) {
$('#bar').html(data);
}
});
})
</script>
<div id="bar"></div>
Run Code Online (Sandbox Code Playgroud)
而且 index.php
[编辑]:sleep()我只是想模拟连续的输出流,如不支持的多线程程序php.
<?php
for($i=0; $i<=10; $i++)
{
sleep(1);
echo "$i";
}
Run Code Online (Sandbox Code Playgroud)
似乎输出立即回显,所以我立刻得到结果012345678910.
我也试过了
setInterval(function (){
$.ajax({
url: 'index.php',
success: function(data) {
$('#bar').html(data);
}
});
}, 1000);
Run Code Online (Sandbox Code Playgroud)
相反,我很难保持价值'progress',所以我做到了
<?php
session_start();
if(isset($_SESSION['value'])){
if($_SESSION['value'] >= 10)
{
unset($_SESSION['value']);
}
else
{
$_SESSION['value']++;
}
}
else
{
$_SESSION['value'] = 0;
}
echo $_SESSION['value'];
Run Code Online (Sandbox Code Playgroud)
作为我的PHP的一部分.但似乎,我在连续间隔调用ajax函数.
我的问题是,
谷歌如何使用进度条,同时登录gmail.他们是否'stream'像我在第一个例子中尝试的那样得到数据的连续性,或者在某些网址上发送(定期)请求(虽然不是通过ajax ...通过JSONP或其他任何方式)并且像第二个那样提升页面?
我可以做同样的使用php,即使不使用PHP,使用,是支持多线程JavaScript和其他服务器端脚本语言是我能做什么?
我不确定Gmail对进度条的确做什么,但你可以在PHP中实现类似的功能,尽管它可能有点棘手.
首先,解释为什么你的例子不起作用:
如果你回忆和睡觉,就像你的第一个例子,它永远不会工作.Ajax执行完整请求 - 也就是说,如果响应没有完成,它将等待.循环和休眠时,在PHP脚本执行完毕之前,请求不会"关闭".
如果您使用会话,就像在另一个示例中一样,问题就变成了会话存储.商店通常在脚本执行期间被锁定,并且它不会自行更新以允许您想要的进度检查类型.
您可以做的是手动将进度写入文件(或数据库).例如:
file_put_contents('progress.txt', 1);
Run Code Online (Sandbox Code Playgroud)
然后,让另一个脚本读取文件并输出内容.
这应该有效,因为file_put_contents打开,写入和关闭文件.
使用PHP以外的其他语言会更容易.多线程可能会让它变得更容易,但不是必需的.但是,持续运行的进程会使其更简单(PHP仅在您的请求期间运行一个进程然后退出)
| 归档时间: |
|
| 查看次数: |
5177 次 |
| 最近记录: |