如何用Ajax显示我的php循环步骤? (长期投票......)

时间:2011-07-07 13:29:59

标签: php jquery ajax long-polling

我有一个PHP服务器端脚本,在foreach循环中,通过SSH连接到路由器并执行一些配置块。

    <?php
function apply($hostname){
    $ssh = new Net_SSH2($hostname);
    if (!$ssh->login($this->username, $this->password)) {
       exit('Login Failed');
    }
    $i = 1;
    foreach($NMConf->configuration as $conf_step){
       $ssh->write($conf_step); //Can take 5s...
       $this->ssh_errors[] = $ssh->read("#");
       echo "Step".$i." ok.. <br/>";
       $i++;
       flush();
       sleep(1);}
} ?>

这个功能由jQuery和Ajax请求调用......

$.ajax({
    url:'apply',
    type:'POST',
    cache:false,
    async:false,
    data:{},
    success: function(data){
      console.log(data);
      $('#myDiv').append(data); // *_*
    }   
 });

我想在输出div中显示不同的步骤,例如..

Step 1 (working....)

然后

Step 1 OK!
Step 2 (working ....)

然后

Step 1 OK!
Step 2 OK!

我该怎么做?

我看了很长的投票资料和反转ajax,但似乎有点棘手。

任何想法!

由于

1 个答案:

答案 0 :(得分:1)

我的建议,放入会话的东西的信息,并尝试询问PHP脚本的状态

创建将读取会话

的脚本
<?php 
         $step = $_GET["step"];
        if($_SESSION["last_step"] != $step) //just to avoid same info twice
        {
        if(isset($_SESSION['step'.$step])
           echo $_SESSION['step'.$step];
        else
        }
        else { echo '10' }; //this will tell you that next step is not executed jet  
        ?>

更新现有脚本,以便在完成或处理数据后将数据放入会话中。 更新您的javascript以执行您想要的每一秒或每个时间。

var _int = setInterval(your_method, 1000);

完成所有步骤后,只需清除间隔_int clearInterval(_int)