只从PHP文件中获取新数据 - jQuery

时间:2011-08-06 23:07:10

标签: php jquery json get real-time

我不想从使用JSON使用JavaScript解析的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:

<?

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

?>

我怎样才能这样做只有PHP文件中的新数据被JavaScript解析而不是所有数据?

谢谢!

2 个答案:

答案 0 :(得分:0)

我建议您修改选择查询。而不是将其作为select *来自用户,添加一些where where userId&gt; somenumber。现在发送我们在上一个请求中处理的最后一个userId以及您从客户端发出的下一个请求。这将确保您始终获得新的响应。

答案 1 :(得分:0)

事实上,对于您当前的设置,每次调用“getUsers”都会重放游戏的整个状态,直到最后一次移动,并且不一定完成正确的状态。为了获得所需的行为,您需要在“users”表中添加时间戳或序列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