可以使用php和javascript使用ajax进度条

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函数.

我的问题是,

  1. 谷歌如何使用进度条,同时登录gmail.他们是否'stream'像我在第一个例子中尝试的那样得到数据的连续性,或者在某些网址上发送(定期)请求(虽然不是通过ajax ...通过JSONP或其他任何方式)并且像第二个那样提升页面?

  2. 我可以做同样的使用php,即使不使用PHP,使用,是支持多线程JavaScript和其他服务器端脚本语言是我能做什么?

Jan*_*nen 9

我不确定Gmail对进度条的确做什么,但你可以在PHP中实现类似的功能,尽管它可能有点棘手.

首先,解释为什么你的例子不起作用:

如果你回忆和睡觉,就像你的第一个例子,它永远不会工作.Ajax执行完整请求 - 也就是说,如果响应没有完成,它将等待.循环和休眠时,在PHP脚本执行完毕之前,请求不会"关闭".

如果您使用会话,就像在另一个示例中一样,问题就变成了会话存储.商店通常在脚本执行期间被锁定,并且它不会自行更新以允许您想要的进度检查类型.

您可以做的是手动将进度写入文件(或数据库).例如:

file_put_contents('progress.txt', 1);
Run Code Online (Sandbox Code Playgroud)

然后,让另一个脚本读取文件并输出内容.

这应该有效,因为file_put_contents打开,写入和关闭文件.

使用PHP以外的其他语言会更容易.多线程可能会让它变得更容易,但不是必需的.但是,持续运行的进程会使其更简单(PHP仅在您的请求期间运行一个进程然后退出)