Как я могу отобразить шаги моего цикла php с Ajax? (длинный опрос ...) - PullRequest
0 голосов
/ 07 июля 2011

У меня есть серверный скрипт 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 Ответ

1 голос
/ 07 июля 2011

Что я предлагаю, информация о вещах, помещенных в сессию, и попробуйте запросить 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)

...