Есть ли лучший способ, чем использовать jQuery и временные метки для обновления таблицы?
Следующий "фрагмент" кода создает стандартную HTML-страницу с простой таблицей, отображающей сообщения и их временные метки (которые могут быть представлены лучше, но это неважно).
Сначала PHP извлекает все сообщения (начиная с определенной обновленной отметки времени, если она имеется). Он использует PDO для извлечения записей (по причинам абстракции БД). Если указана временная метка, она кодирует содержимое в json, возвращает его и умирает (Ах, семантика убийства). Если нет, он продолжает и возвращает полную html-страницу, где все записи показаны в таблице, а также кнопку, которая при нажатии вызывает тот же PHP-скрипт с отметкой времени, чтобы получить любые обновленные сообщения, так как и обновляет соответствующие ячейки строки таблицы.
Я думаю, что, хотя и основной, это работает очень хорошо. Он хорошо использует jQuery для обновления любых относительных обновлений, и я предполагаю, что что-то очень похожее может очень хорошо работать для небольшого html-чата, где функция table_update вызывается каждые две секунды, или время увеличивается экспоненциально.
Вопрос: Есть ли хорошая практика кодирования, которая могла бы сделать это еще лучше?
Например, мне интересно, является ли предоставление TR какого-либо идентификатора хорошей идеей; кодовый блок PDO немного смешан, и я очень рад видеть продуктивную функцию DIE(), когда обычно я видел ее только для обработки ошибок после ошибок, проверки безопасности или ложный сценарий включает в себя.
Есть ли хорошие разработчики, которые раньше делали это, и теперь используют лучшие подходы?
Я не хочу рамки, я хочу что-то относительно простое, например. флэш-страницы.
<?php
$sql = 'SELECT id, message, timestamp
FROM messages
WHERE id_user = :id_user';
if(isset($_REQUEST["timestamp"]))
{
$sql .= ' && timestamp >= :timestamp';
}
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':id_user' => $id_user, ':timestamp' => $_REQUEST["timestamp"]));
$data = $sth->fetchAll();
if(isset($_REQUEST["timestamp"]))
{
echo json_encode($data);
die();
}
?>
<html>
<head>...</head>
<body>
<input id='button_check' value='Update this table' type='button' />
<table id="table_check">
<tr>
<th>Message</th>
<th>Time</th>
</tr>
<?php foreach($data as $record) { ?>
<tr id="tr_<?php echo $record["id"] ?>">
<td><?php echo $record["strNumber"] ?></td>
<td><?php echo $record["strFullName"] ?></td>
</tr>
<?php } ?>
</table>
<script type="text/javascript">
var intLastUpdate = <?php echo time() ?>;
$(document).ready(function() {
$('#button_check').click(update_table());
});
function update_table()
{
$.getJSON("this_page.php?timestamp=" + intLastUpdate, function(data) {
$.each(data, function(index, record) {
$('#tr_' + record.id).find("td").eq(0).html(record.message);
$('#tr_' + record.timestamp).find("td").eq(1).html(record.timestamp);
if(intLastUpdate < record.timestamp) {
intLastUpdate = record.timestamp;
}
});
});
}
</script>
<body>
</html>