正在创建一个博客项目。我希望每次创建新帖子时,用户都不必刷新页面以查看帖子,它只会附加到已有的帖子。这就是目前正在做的事情
function postTin() {
$.ajax({
type:'POST',
url: "frextra.php",
data:"ins=passPost",
success: (function (result) {
$("#post").html(result);
})
})
}
postTin(); // To output when the page loads
setInterval(postTin, (5 * 1000)); // x * 1000 to get it in seconds
这里做的是页面每5秒重新加载发布的数据,在这种情况下它还会添加新发布的数据
我想要的是这个: 我不想使用计时器,我希望只在数据库中添加新帖子时才加载请求。被困在这里两个星期。四处搜寻,没有看到任何帮助。
答案 0 :(得分:1)
您可以设置一个间隔以获取最新的帖子ID,并检查它是否与您当前加载的最新帖子ID相同。
$.ajax({
type: 'GET',
url: "latestpost.php",
success: (function (result) {
doStuff(result)
})
})
function doStuff(latestIdInDatabase) {
// Here you do whatever you want
// latestIdInDatabase is the latest entry, they should be integer or whatever in
// order to compare them
if (currentLatestId < r) {
/// do stuff
// Like telling the user to realod because there is a new entry
// Or make anoher call to get that from your current post to the latest
// and using jquery or any framework print it
}
}
latestpost.php 应该返回类似最新帖子ID的内容。
无论哪种方式,我认为Luis felipe De jesus Munoz说,你需要websockets,或者只是不重新加载,人们可能正在使用网站而你只是重新加载而不说任何东西,告诉用户有新帖子和顺序看到他们,他们必须重新加载。
答案 1 :(得分:0)
我不知道如何在没有计时器的情况下实现这一目标。所以这是我的解决方案,您需要调整代码:
添加与页面的最新发布日期对应的帖子参数
data: "ins=passPost&date=" + $('#posts-list li:first-child').data('date')
这假设你的HTML中有这样的东西
<!-- Posts ordered from newest to oldest -->
<ul id="posts-list">
<li data-date="2018-03-22 15:20">
<!-- Here the Post HTML code -->
</li>
<!-- Here the remaining Posts -->
</ul>
在PHP中,您使用post参数date
并请求db用于较新的帖子,例如
'... AND date_added > ' . some_db_escape($_POST['date']) . '...'
在ajax成功函数中,您需要预先添加来自PHP的数据
$('#posts-list').prepend(result);
PHP发送的数据必须是类似于上面的HTML <li>
元素的字符串,表示从最新到最旧的较新帖子
<li data-date="2018-03-23 10:43">
<!-- Here the Post HTML code -->
</li>
<li data-date="2018-03-22 18:00">
<!-- Here the Post HTML code -->
</li>
<!-- etc. -->