I´m trying to do the ajax php polling function it seemed to work fine but I can´t understand what´s wrong or did I misunderstood something ?
Let´s see my code:
*In index.php*
$tst = $conn->prepare('SELECT dtimestamp FROM inbx where recipient=:recipient ORDER BY dtimestamp DESC LIMIT 1');
$tst->bindParam(':recipient', $row['user_id']);
$tst->execute();
$rk= $tst->fetch();
<body onload="chkinbx(<?php echo $row['user_id']?>, <?php echo $rk['dtimestamp'] ?>);">
In Javascript
function chkinbx (user_id, cur_time) {
var old_timestamp=0;
var url="function.php?user_id="+user_id+"&cur_time="+cur_time;
var params="user_id="+encodeURIComponent(user_id)+"&cur_time="+encodeURIComponent(cur_time);
xmlHttp=GetXmlHttpObject()
xmlHttp.onreadystatechange=function () {
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){
var result=xmlHttp.responseText;
var res=JSON.parse(result);
if(res[2]==old_timestamp || cur_time==res[2]){
//// do nothing
}else{
document.getElementById(bb).innerHTML="<a class='topNav' href='inbox.php'><span class='countmsg'>"+res[1]+"</span></a>";
}
setTimeout(function() {
chkinbx (res[3], res[4], cur_time); // div user_id curtime
}, 1000); //8 seconds
}
}
In function.php
$params=$_POST['params'];
$user_id=$_POST['user_id'];
$cur_time=$_POST['cur_time'];
$stmt = $conn->prepare('SELECT dtimestamp FROM inbx where recipient=:recipient AND inbxicn_is_click=:inbxicn_is_click ORDER BY database_timestamp DESC' );
$stmt->execute(array(':recipient'=>$user_id,':inbxicn_is_click'=>'N'));
$r=$stmt->fetch();
while ($r['dtimestamp'] <= $cur_time) {
sleep(10);
clearstatcache();
}
$phpArray = array("ok",$stmt->rowCount(), $r['database_timestamp'], $user_id);
echo json_encode($phpArray);
It won´t work until I change to ($r['dtimestamp'] > $cur_time) ; *I wonder why ?*
Because the logic is $cur_time( which post from javascript is the original timestamp in index.php. and $r['dtimestamp'] is the curent timstamp in database. This is the opposite from logic.