当AJAX获取图像时,图像每秒刷新一次,导致闪烁和闪烁


Images refreshes every second when fetched by AJAX causing flickering and blinking

所以我在为我的博客cms项目做一个评论系统。我想要实现的是每秒钟从另一个php文件(ex- comment.php),这是从MySql表中获取数据,并显示在一个div这是-

<div class="results" id="result"></div>

我能够成功地做到这一点,文本评论加载良好,但图像评论(评论中有图像)每秒闪烁。可能是由于AJAX每秒钟刷新一次整个div。如果有人能帮我弄清楚如何停止闪烁,我会很感激的。我的JavaScript代码是-

<script>
function refresh_div() {
    jQuery.ajax({
        url:'comment.php',
        type:'POST',
        success:function(results) {
            jQuery(".result").html(results);
            var message=$('#result');
            message.scrollTop(message[0].scrollHeight);
        }
    });
    }
t = setInterval(refresh_div,1000);
</script>

这里是注释。php文件,如果需要-

<?php
session_start();
if(!isset($_SESSION['uid'])){
header('location:login.php');
}
include('config.php');
$sql = "SELECT * FROM messages ORDER BY id ASC LIMIT 0, 30 ";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
$uname=$row['uname'];
$message=$row['message'];
echo "<span>".$uname."</span>";
echo ": ";
echo "<span style='font-family:myfont2;'>".$message."</span>";
echo "<br>";
}
?>

我读到图像缓存可以解决这个问题,但我希望AJAX解决方案只有在可能的情况下。

EDIT-你们建议我保持旧消息加载和"在ajax中只获取最新的数据"。我相信我自己不能做到这一点,并期待一些代码的帮助。

感谢

额外说明-这是我在这里的第一个问题,所以我的道歉,如果我没有问或解释得很好或问了一些我不应该问的问题。希望你们这些好心人能理解:)

你可以考虑使用Etags

这个想法很简单- comments.php添加了一个额外的HTTP头(因此不会破坏现有的功能),这在某种程度上允许客户端(你的Javascript)要求服务器"只发送给我更新的内容,如果它已经改变了我已经有的版本")。

服务器端需要生成某种类型的确定值(只有当数据库中的数据改变时才会改变——比如SHA散列),并将其作为Etag值与响应一起提供。

你的客户端(jQuery可以为你做这件事)缓存Etag值,并且在以后的请求中包含缓存的Etag。如果服务器确定新的响应将导致相同的Etag(没有更改)-它响应一个304 Not Modified

Wikipedia on Etags: https://en.wikipedia.org/wiki/HTTP_ETag

jQuery中的Etags(参见页面上的"ifModified"):http://api.jquery.com/jquery.ajax/


在PHP中快速演示:https://css-tricks.com/snippets/php/intelligent-php-cache-control/

这里他们使用磁盘上文件的修改时间和MD5哈希值。您需要修改这些值,使其适合您的SQL查询结果(例如,您可以基于注释表中的自动递增主键,再加上一个DEFAULT CURRENT_TIMESTAMP())。