2011-07-07 5 views
0

私はforeachループ内で、SSH経由でルータに接続し、いくつかの設定ブロックを実行するPHPサーバサイドスクリプトを持っています。このfonctionはjQueryとAjaxリクエストによって呼び出され私のPHPループのステップをAjaxでどのように表示できますか? (長いポーリング...)

<?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);} 
} ?> 

...

$.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 ....) 

d次に

Step 1 OK! 
Step 2 OK! 

どうすればいいですか?

私は長いポーリングのものを見ていました&リバースajaxですが、それはちょっと難しいようです。

すべてのアイデア!

おかげで、私が提案する何

答えて

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を更新して、毎秒または何時でも実行できるようにします。 PHPは、スクリプトの最後に$ _SESSION内容を持続しない、またはあなたがそれを言うとき:

var _int = setInterval(your_method, 1000); 

すべてのステップがちょうど明確な間隔を完了したらあなたはしかし、最も重要なビットを逃しているclearInterval(_int)

+0

を_intそれを手動で行う。 'session_write_close()'でしかできません - 後で同じセッションを開こうとしたことはありませんでしたが、楽しい実験になるかもしれません。 – phant0m

+0

セッションは有効で、同じセッションがリクエスト間で使用されるまで有効です。したがって、基本的には、最初のリクエストでセッションに値を入れることができ、その他のリクエストはすべて、そのデータだけを取得して、セッションは要求ごとに開始されます。 –

+1

私はあなたの言葉を理解していません。要点:スクリプトが進行中で、あるスクリプト/リクエスト内から$ _SESSIONを継続的に更新すると、セッションデータを永続化するまでは、他のリクエスト/セッションでは利用できなくなります。要求の – phant0m

関連する問題