>请在此链接中查看示例:我的测试代码
这将在我的实际站点上的div 上使用,并且有同样的问题。如您所见,div 每 2 秒闪烁一次,或者在我的测试代码站点中闪烁整个页面,然后当您向下滚动时,它将在同一时间自动向上滚动。显然,这是由设置间隔引起的。
我也收到控制台错误:
主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请查看 http://xhr.spec.whatwg.org/。
有什么办法可以改善这一点吗?
另外,还有其他方法可以在每秒使用 ui 呈现数据库中的更新列表吗?
这是我的代码:
<div id="container"></div>
<script>
function refreshNews()
{ $.get('../php/ajaxreportall.php').success(function(data){
$("#container").html(data);
})
}
refreshNews();
setInterval(refreshNews, 2000);
</script>
脚本文件
<?php
require("database.php");
$sql = "SELECT * from Report r inner join reddb.User_Info u
on u.user_email = r.user_email ";
$res = odbc_exec($conn,$sql);
echo "
<link rel='stylesheet' type='text/css' href='../css/homelayout.css'>
<script src='../js/home.js'></script>
";
while($feedItem = odbc_fetch_array($res))
{
echo "
<div class='feedItem'>
<div>Report No. <label class='feedItemRepID'>" . $feedItem['report_id'] . "</label></div>
<div>Name: <label>" . $feedItem['firstname'] . "</label></div>
<div>Contact No: <label>" . $feedItem['contact'] . "</label></div>
<div>Details: <label>" . $feedItem['report_detail'] . "</label></div>
<div>Date: <label>" . $feedItem['date_report'] . "</label></div>
<div class='buttons'>
<button class='btn btn-success btnRespond' data-toggle='modal' data-target='#myModal'>Respond</button>
</div>
</div>
";
}
?>
对 Ajax 使用间隔不是一个好主意。而是改为:
function refreshNews() {
$.get('../php/ajaxreportall.php').success(function(data){
$("#container").html(data);
setTimeout(refreshNews, 2000);
});
}
$(function() {
refreshNews();
});
或测试数据是否更改:
var rfn="";
function refreshNews() {
$.get('../php/ajaxreportall.php').success(function(data){
if (rfn!=data) {
$("#container").fadeOut(function() {
$("#container").html(data);
$("#container").fadeIn();
});
rfn=data;
}
setTimeout(refreshNews, 2000);
});
}
$(function() {
refreshNews();
});
如果您希望上述操作永不停止,即使失败,请使用 .always
function refreshNews() {
var jqxhr = $.ajax('../php/ajaxreportall.php')
.done(function(data){
if (rfn!=data) {
$("#container").fadeOut(function() {
$("#container").html(data);
$("#container").fadeIn();
});
rfn=data;
}
})
.fail(function() {
console.log( "error" );
})
.always(function() {
setTimeout(refreshNews, 2000);
});
}
该错误表明您正在尝试进行已弃用的同步调用,您的代码中可能有类似以下内容:
$.ajaxSetup({
async: false
});
删除此消息或将其更改为 true,以删除此错误消息。
关于滚动和闪烁的问题:
为了刷新您的新闻内容,您正在刷新完整的 HTML,因此您的完整 HTML 会一次又一次地加载。这样想:你正在爬梯子,突然梯子消失了,一个新的梯子出现了?你会怎样?你会回到起点,即地面,挠头说刚刚发生了什么?
滚动也会发生同样的事情,用户滚动浏览新闻内容,然后突然重新加载,用户回到起点。
为了解决这个问题,你必须重构所有内容,你必须将新新闻附加到列表中,并且必须存储一些标识符来识别你的上一篇文章,你将这个标识符发送到服务器,然后你的服务器将只发送比该帖子更新的数据,并且还将向最新的帖子发送一个标识符作为响应。