私は、サーバ上のアップデートをチェックし、もしあればユーザに通知するウェブベースのアプリケーションを開発しています。これはプッシュメソッドの代替方法です。アプリケーションのバックグラウンドプロセスは、毎時PHPファイルをチェックして、MySQLデータベースへの新しい追加があるかどうかを確認します。存在する場合、ユーザにホーム画面に通知する。PHP/Javascriptでタイムスタンプを比較する
問題が発生している部分は、タイムスタンプを比較しています。電話機がJavaScriptファイル内のローカルストレージ内のPHPファイルに最後にアクセスしたことを通知する変数は、"lastUpdate"
のままです。電話機が接続するたびに、変数が最後に接続されたときに変数が渡されます。データベースに新しいエントリがあり、タイムスタンプが最後の更新よりも大きい場合、通知カウントが増加します。
PHP:
$lastUpdate = $_GET["q"];
//connect to server
mysql_select_db("dbr", $con);
$sql="SELECT * FROM notification";
$result = mysql_query($sql);
$updateCount = 0;
if ($lastUpdate == "1970-01-01 01:00:00")
{ $compareTime = time();}
else
{ $compareTime = intval($lastUpdate); }
while($row = mysql_fetch_array($result))
{
$rowTime = strtotime($row['timeAdded']);
if ($rowTime >= $compareTime)
{
$updateCount++;
}
}
echo json_encode(array('lastUpdate' => $compareTime, 'numUpdates' => $updateCount, 'passedValue' => $compareTime));
はJavaScript:
var timedLoop;
var timer_is_on=0;
localStorage.lastUpdate = "1970-01-01 01:00:00";
localStorage.numUpdates = 0;
localStorage.passedValue = ""; //used it for debugging
function timedCount()
{
document.getElementById('testContent').innerHTML = "lastUpdate: " + localStorage.lastUpdate;
document.getElementById('testContent2').innerHTML = "numUpdates: " + localStorage.numUpdates;
document.getElementById('testContent3').innerHTML = "passedValue: " + localStorage.passedValue;
contactServer(localStorage.lastUpdate);
if(Number(localStorage.numUpdates)>0)
{
alert("NOTIFICATIONS AVAILABLE");
notifyUser();
localStorage.numUpdates = 0;
}
document.getElementById('txt').value=new Date();
timedLoop=setTimeout("timedCount()",10000);
}
function contactServer(update)
{
if (window.XMLHttpRequest){ xmlhttp=new XMLHttpRequest();}
else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var result = JSON.parse(xmlhttp.responseText);
localStorage["lastUpdate"] = result["lastUpdate"];
localStorage["numUpdates"] = result["numUpdates"];
localStorage["passedValue"] = result["passedValue"];
}
}
xmlhttp.open("GET","address.php?q="+update,true);
xmlhttp.send();
}
問題は、それが私のために働いていないです。私はこれにかなり新しいので、私はそれを正しくやっているかどうか分からない。関数timedCount()は "onload"によって本体にロードされるため、開始時に実行され、この場合は10秒ごとに実行され続けます。しかし、タイムスタンプの値は、最初の2つのループの後で変更を停止します。コードを少し変更しようとすると、私はまったく予期しない結果に陥ります。私はしばらくの間これをしてきたので、どんな助けもありがとう!
ありがとうございました! – user1152440