Только получить новые данные из файла PHP - jQuery - PullRequest
0 голосов
/ 07 августа 2011

Вместо перезагрузки старых данных из файла 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 вместо всех данных?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 августа 2011

Действительно, с вашей текущей настройкой, каждый вызов 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
0 голосов
/ 07 августа 2011

Я бы предложил вам изменить выбранный запрос.Вместо того, чтобы использовать его как select * from users, добавьте условие where, например, где userId> somenumber.Теперь отправьте последний идентификатор пользователя, который мы обработали в последнем запросе, вместе со следующим запросом, который вы делаете со стороны клиента.Это гарантирует, что вы всегда получите новый ответ.

...