【问题标题】:Only get new data from PHP file - jQuery只从 PHP 文件中获取新数据 - jQuery
【发布时间】:2011-08-06 23:07:09
【问题描述】:

我不想从我使用 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 解析而不是所有数据?

谢谢!

【问题讨论】:

  • 但是新数据是什么意思。只有移动的用户?

标签: php jquery json get real-time


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    确实,在您当前的设置下,每次调用“getUsers”都会重播游戏的整个状态,直到最后一步,并且不一定以正确的状态结束。为了获得您想要的行为,您需要在“用户”表中添加时间戳或序列号,然后对结果进行排序以获得最新的移动。您需要分别为每个用户执行此操作,因此您还需要提供一种机制来检索和遍历所有用户...

    这样你的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-17
      • 2021-08-12
      • 1970-01-01
      相关资源
      最近更新 更多