仅从PHP文件- jQuery获取新数据


Only get new data from PHP file - jQuery

而不是重新加载旧数据从PHP文件,我用JavaScript使用JSON解析,我想只加载新数据。我的项目是一个小型多人游戏环境,我的目标是让所有用户都能实时看到对方的移动。

下面是我的代码: 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而不是所有的数据解析?

谢谢!

我建议您修改选择查询。与其使用select * from users,不如添加一些where条件,如where userId> someenumber。现在发送我们在上一个请求中处理的最后一个userId以及您从客户端发出的下一个请求。这将确保您总是会得到新的响应。

事实上,在你当前的设置下,每次调用"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