хорошо, может быть, я что-то здесь упускаю, но, хоть убей, я не могу этого понять. Я собираюсь запустить этот сценарий длительного опроса Ajax на локальном хосте, поэтому меня не беспокоит количество запросов, но я все же хотел бы, чтобы он работал.
Я запускаю администратора очков и отображаю табло.
На одной странице у меня есть администратор, который, когда вы нажимаете кнопку, добавляет 10 баллов в столбец «оценка» моей таблицы «список», где класс равен классу кнопки. У меня нет НИКАКИХ проблем Обновление базы данных, мы просто настраиваем всю картину.
На второй странице. У меня есть вызов ajax, который в настоящее время срабатывает каждую секунду и получает самую последнюю обновленную строку, а также отображает всплывающее окно, уведомляющее пользователя о том, что 10 баллов были только что добавлены к счету So-And-So.
Две проблемы:
- Он стреляет каждую секунду.
- Даже если база данных не обновлялась, она все равно работает.
Я ЗНАЮ, что могу сделать это с помощью длинного опроса ajax, но я просто не могу понять, как правильно соединить все части вместе, чтобы вызов ajax срабатывал только при обновлении базы данных.
JS
$(document).ready( function() {
pingScores();
});
var timestamp = null;
function pingScores() {
$.ajax({
type: "GET",
url: "getUpdate.php?timestamp="+timestamp,
cache: false,
async: true,
success: function(data){
var json = eval('(' + data + ')');
var notinyClass = json[2];
var notinyName = json[3];
//$.notiny({ text: notinyName+"<span class='addScore'> +10</span>", width: '100%', image: notinyClass }); - this is the popup API call that I am passing the class and the name to
timestamp = json["timestamp"];
setTimeout("pingScores()", 1000);
}
});
};
PHP (getUpdate.php)
<?php
require "config.php"; //-- storing all login credentials elsewhere
$db = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
mysql_select_db($db_name) or die(mysql_error());
$query = "SELECT * FROM roster ORDER BY last_updated DESC LIMIT 1";
$result = mysql_query($query);
$array = mysql_fetch_row( $result );
echo json_encode($array);
mysql_close();
?>
БАЗА ДАННЫХ
|id | last_updated | class | name | score | active |
|-------|--------------------|-------|-------|-------|--------|
| 1 |2017-04-26 09:37:11 | alpha | Alpha | 10 | 1 |
|-------|--------------------|-------|-------|-------|--------|
| 2 |2017-04-26 09:32:59 | beta | Beta | 10 | 1 |
|-------|--------------------|-------|-------|-------|--------|
| 3 |2017-04-26 09:32:59 | delta | Delta | 10 | 1 |
Когда база данных обновляется с помощью ряда кнопок, которые ADD указывает на счет, PHP выглядит следующим образом:
<?php
require "config.php";
$conn = new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$class = $_POST["class"];
$sql = "UPDATE roster SET score = score + '10', last_updated = now() WHERE class = '".$class."'";
if ($conn->query($sql) === TRUE) {
echo "Updated data successfully\n";
} else {
echo $conn->error;
}
$conn->close();
?>
Каждое руководство, которое я смог найти о том, как выполнять длинный опрос, извлекает свои данные из txt-файла, а инструкции о том, как извлекать данные из базы данных, не самые четкие. Я надеюсь получить некоторые разъяснения о том, как это сделать.