1週間のグーグル検索と検索の後、data.textという名前のフラットテキストファイルからではなく、データベーステーブルからのロングポーリングに関するチュートリアルを1つも見つけるのが困難です。現在、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
私はここに例を挙げています。この例では、3 つのファイルが使用されています。
- index.html
- getdat.php
- データ.テキスト
データベース(mysql)からデータを取得するために4番目のファイルを作成する必要はありますか? そうでない場合、データベースからの動的データを使用するには、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);
?>