Есть ли лучший способ, чем использовать 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>

0 ответов

Другие вопросы по тегам