而不是重新加载旧数据从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