我有一个ajax调用,从javascript获取当前时间,将其作为var发送到PHP文件,PHP将JSON对象返回给JS,在页面加载时间和现在之间发布任何内容。 (想想SO或Twitter ...... 31个新帖子。点击加载。)
此时Ajax调用每10秒触发一次,初始检查正常。但是当我点击加载时似乎没有设置正确的时间,因为它仍然会在下次调用时显示相同的新帖子。由于某种原因,它会在2或3次呼叫后停止。
我想知道我是不是正确设置了变量范围,或者我是否遗漏了一些明显的东西。
//this time var works fine
lastchecked = new Date();
$(document).ready(function()
{
setInterval(function()
{
$.ajax(
{
type: 'POST',
url: 'index.php?page=getposts',
data: { lastchecked : lastchecked },
dataType:'json',
success: function (data)
{
var obj = data.length;
if (obj > 0)
{
$('#messages').html('<div class="alert alert-info"><a href="#" id="newPosts">' + obj + ' new posts. Click to load.</a></div>');
$('#newPosts').click(function()
{
$.each(data, function(i, item)
{
if(typeof item == 'object')
{
$('#posts').append('<div class="user"> <a href="#" class="clearfix"> <img src="'+item.thumbnail+'" class="thumbnail"> <h4>'+item.post_time+'</h4></a></div>');
}
});
$('#messages').empty();
//this time var doesn't get reset until 2 or 3 calls later
lastchecked = new Date();
alert(lastchecked);
return false;
});
}
}
});
}, 10000);
});
我的PHP如果需要:
$lastchecked = strtotime($lastchecked);
$lastchecked = date('Y-m-d H:i:s', $lastchecked);
$sth = $dbh->prepare("SELECT * FROM post WHERE post_time > :lastchecked ORDER BY post_time DESC");
$sth->execute(array(':lastchecked' => $lastchecked));