经过一周的谷歌搜索和搜索。我什至很难找到一个关于从数据库表而不是从名为 data.text 的平面文本文件中进行长轮询的教程。目前,我在 data.text 中手动编写任何内容,它会立即出现在浏览器中。
这就是问题:使用数据库进行长轮询?即使在 StackOverflow 中也没有正确回答。(我在这里找到了很多,但徒劳无功。)这个例子也是 MySQL 的 filemtime 替代品
如何修改 getdata.php 以使其能够从数据库中获取数据?
$sql=mysqli_query($database,"SELECT * FROM messages where time>=$curr_date ORDER by time DESC");
while($row=mysqli_fetch_array($sql)){
$messages=$row['messages'];
$id=$row['id'];
echo $messages;
}
消息表如下
id fro to mesg time status last_modified
我在这里列出一个例子。在此示例中,使用了三个文件。
- 索引.html
- 获取数据文件
- 数据.文本
是否需要制作第四个文件来从数据库(mysql)获取数据?如果不是,那么在 getdata.php 或 data.text 中需要进行哪些类型的更改才能使用数据库中的动态数据?
这是我的 Javascript
<script type="text/javascript" charset="utf-8">
var timestamp = null;
function waitformsg() {
$.ajax({
type:"Post",
url:"getdata.php?timestamp="+timestamp,
async:true,
cache:false,
success:function(data) {
var json = eval('(' + data + ')');
if(json['msg'] != "") {
$("#messages").append(json['msg']);
}
timestamp = json["timestamp"];
setTimeout("waitformsg()", 1000);
},
error:function(XMLhttprequest, textstatus, errorthrown) {
alert("error:" + textstatus + "(" + errorthrown + ")");
setTimeout("waitformsg()", 15000);
}
});
}
$(document).ready(function() {
waitformsg();
});
</script>
这是 getdata.php 文件
<?php
include("../model/includes/classes.php");
$filename='data.php';
$lastmodif=isset($_GET['timestamp'])?$_GET['timestamp']:0;
$currentmodif=filemtime($filename);
while($currentmodif<=$lastmodif){
usleep(10000);
clearstatcache();
$currentmodif=filemtime($filename);
}
$response=array();
$response['msg']=file_get_contents($filename);
$response['timestamp']=$currentmodif;
echo json_encode($response);
?>