2011-08-06 20 views
0

JSONを使用してJavaScriptを解析するPHPファイルから古いデータを再ロードするのではなく、新しいデータをロードするだけです。私のプロジェクトはマルチプレイヤー環境で、私の目標は、すべてのユーザーにリアルタイムで他の動きを見せることです。ここでPHPファイルからのみ新しいデータを取得する -

は私のコードです:

はJavaScript:

function getUsers() { 
     $.get("database/getData.php", function(data) { 
     // data returned from server; 

     for(var i = 0; i < data.response.length; i++) { 

      // users obtained from the array... parse them now 

      var user = data.response[i].split(" "); 

      // user info 

      var id = user[0]; 
      var username = user[1]; 
      var xx = user[2]; 
      var yy = user[3]; 

      userCount = data.response.length; 

      $(".online").html(userCount + " users online right now.") 

      // position the users 

      moveCharacter(username, xx, yy); 


     } 

     }, "json"); 
    } 

    var infoGetter = setInterval(getUsers, 2000); // we may need to improve this... type of realtime 

そして、ここでは私のPHPです:

私はそれがとてもPHPファイルから新しいデータのみが解析されていることを確認するにはどうすればよい
<? 

$database = sqlite_open("thenew.db", 0999, $error); 
if(!$database) die($error); 

$query = "SELECT * FROM users"; 
$results = sqlite_query($database, $query); 
if(!$results) die("Canot execute query"); 

$data = array(); 
while($row = sqlite_fetch_array($results)) { 
    $data[] = $row['uid'] . " " . $row['username'] . " " . $row['xPos'] . " " . $row['yPos']; 
} 
echo json_encode(array("response"=>$data)); 

sqlite_close($database); 

?> 

すべてのデータの代わりにJavaScriptを使用しますか?

ありがとうございます!

+0

しかし、**新しいデータ**を意味します。移動したユーザーのみ? – veritas

答えて

0

選択クエリを変更することをお勧めします。ユーザーからselect *を使用する代わりに、userId> somenumberのような条件を追加します。最後のリクエストで処理した最後のuserIdと、クライアント側から次のリクエストを送信します。これにより、常に新しい応答が得られることが保証されます。

0

確かに、現在の設定では、「getUsers」を呼び出すたびに、最後に行った移動までゲームの状態全体が再生され、必ずしも正しい状態で終了するとは限りません。必要な振る舞いを得るには、「ユーザー」テーブルにタイムスタンプまたはシリアルIDを追加し、最新の移動を取得するために結果を並べ替える必要があります。 ...

は、このようにあなたのjavascriptのようなものになり...あなたは個別に各ユーザーのためにこれを行う必要がありますので、あなたも取得し、すべてのユーザーを反復処理するためのメカニズムを提供する必要があります

function getUsers() { 
    $.get("database/getAllUsers.php", function(data) { 
     $.each(data, function(i,uid) { 
      $.get("database/getData.php?uid=".uid, function(data) { 
       ... 

あなたのPHPクエリは次のようになります。

$query = "SELECT * FROM users WHERE uid=$_GET['uid'] ORDER BY timestamp DESC LIMIT 1 
関連する問題