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