无需计时器即可将数据传递到前端

时间:2018-03-22 15:26:37

标签: javascript php jquery ajax

正在创建一个博客项目。我希望每次创建新帖子时,用户都不必刷新页面以查看帖子,它只会附加到已有的帖子。这就是目前正在做的事情

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秒重新加载发布的数据,在这种情况下它还会添加新发布的数据

我想要的是这个: 我不想使用计时器,我希望只在数据库中添加新帖子时才加载请求。被困在这里两个星期。四处搜寻,没有看到任何帮助。

2 个答案:

答案 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. -->