以下“位”代码创建了一个标准的html页面,其中包含一个简单的表格,显示消息及其时间戳(可能会更好地呈现,但我们从不介意。
PHP首先检索所有消息(从特定的更新时间戳开始,如果提供的话)。它使用PDO to retrieve records (for DB abstraction reasons)。如果提供了时间戳,它会在json中对内容进行编码,返回并死掉(啊,谋杀语义)。如果没有,它会继续并返回一个完整的html页面,其中所有记录都显示在表格中,以及一个按钮,当按下该按钮时,将使用时间戳调用相同的PHP脚本,以检索任何更新的消息。同时,并更新相关的表格行单元格。
我认为,虽然基本,但这非常好用。它使用jQuery很好地更新任何相关更新,我猜一些非常相似的东西可以很好地用于一个小的html聊天,其中table_update函数每两秒调用一次,或者时间以指数递增。
问题:是否有任何良好的编程方法可以使这更好?
例如,我想知道给TR任何id是个好主意; 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>