2011-11-08 24 views
0

ここでokは私がやっていることです。 AJAXリクエストが発射されると、whileループチェックを行いますサーバー側から、1つのAjaxリクエスト、複数の応答?

ini_set("soap.wsdl_cache_enabled", "0"); 

$client = new SoapClient("server/test.wsdl"); 

$origtext = array('user'=>$_GET['pointname']); 
$lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0; 
$currentmodif = $client->getTime($origtext)->{"timest"}; 

while ($currentmodif <= $lastmodif) // check if the data file has been modified 
{ 
    // sleep(1); 
    usleep(10000); // sleep 10ms to unload the CPU 
    clearstatcache(); 
    $currentmodif = $client->getTime($origtext)->{"timest"}; 
} 

$response = array(); 
$response['msg']  = $client->getMobile($origtext)->{"phone-num"}; 
$response['timestamp'] = $currentmodif; 

echo json_encode($response); 

flush(); 

Javascriptを

var timestamp = 0; 
var pointname = "test1"; 
var noerror = true; 

function wait() { 
    $.ajax({ 
     type: "GET", 
     url: "backend.php", 
     data: "timestamp=" + this.timestamp + "&pointname=" + pointname, 
     success: function (transp) { 
      var response = eval('(' + transp + ')'); 
      timestamp = response['timestamp']; 
      $("#page1b").html(response['msg']); 
      $("#page1c").html(timestamp); 
      noerror = true; 
     }, 
     complete: function (transp) { 
      if (!noerror) setTimeout(function() { 
       wait() 
      }, 5000); 
      else wait(); 
      noerror = false; 
     } 
    }); 
} 
wait(); 

PHPの下にPHPとJavaスクリプトのスクリプトをチェックアウト時間の値が変わるまでは、新しい値がクライアントに返され、ウェブページに表示されます(これはすべて自動的に行われ、c私の究極の目標は、内部に100の値を持つテーブルを作成することです、100アジャスタ要求を発射することは明らかに不可能です。私はこれらの値を別々に扱いたいものの、すべて同じPHPスクリプトを共有しています。つまり、各値は変更されたときだけ変更され、他のものの影響を受けません。何かアドバイス?

+0

動作しますか?私はPHPの人ではありませんが、PHPコードでは本当に長い時間がかかった単一の応答が生成されると思いました。 – nnnnnn

+0

この 'wait()'を使いこなすのではなく、 'complete'で実行するコールバック関数を渡すだけです。機能的プログラミングは、正しく使用すると非常にエレガントになります。 – meagar

答えて

1

できません。古いブラウザではこれが可能でしたが、容易にできるのはJQuery plug-inでしたが、新しいブラウザではリクエスト全体が受信されたときにのみイベントが発生し、その前にパーシャルレスポンスを読むことはできません。

関連する問題