經過一週的搜索和搜索後,我很難找到關於從數據庫表中長時間輪詢的單個教程,而不是從名爲data.text的平面文本文件中查找。目前,我手動編寫data.text中的任何內容,並立即出現在瀏覽器中。使用數據庫數據進行長輪詢?
這是一個問題:使用數據庫的長輪詢?即使在StackOverflow中也沒有正確回答。 (我發現很多在這裏,但徒勞的)。這個例子也在這裏 filemtime alternative for MySQL
如何修改訪問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
這裏我列出一個例子。 在這個例子中,正在使用三個文件。
- 的index.html
- getdat.php
- data.text
是否有需要作出第四個文件,從數據庫中獲得的數據(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);
?>
歡迎來到Stack Overflow。如果你澄清你的問題,它會幫助你得到答案。看起來您正在創建一個網頁(也稱爲Javascript中的客戶端應用程序),它應該使用ajax來輪詢您的服務器。看來你需要第一個到getdata.php的ajax請求來檢索已經存儲在你的表中的所有消息,以及後續的請求來檢索自最近一次請求以來出現的任何新消息。那是對的嗎?另外,請顯示「消息」表的定義。 –
@OllieJones謝謝你的回覆。你在我看來是解決這個問題的最後希望。當然,我是使用長輪詢技術建立聊天應用程序.Messaes表只是一個包括id,to,from,message,時間專欄。 –