我正在我的网页上处理SCADA系统,并且只有在mysql数据库中的2个表中的任何一个发生变化时,才想用gif刷新某些div。
而且我想每次发生更改时都这样做(表中的新记录)。当这两个表保持不变时,不应执行任何操作(无新记录)。
整个网页都是php/html,这是我使用javascript/ajax的第一种方法。我试过使用:
setInterval($('. examplediv).load(location.href + ' .examplediv), 1000);
但它不适合我的需求。它使我的图形在每次刷新时闪烁,而它们应该是静态的。简化:我想仅在表中的状态从 a->b 更改时才重新加载它们,因此我将 a.gif 与 b.gif 交换。
我可以通过以下方式检测 mysql 表中的变化:记录 ID、时间戳或表校验和,但与 javascript 斗争。
<div class="refresh"> // div i want to refresh
<h3>PIR</h3> // sensor name
<p>Online: <?echo $aonline;?></p> // echoing result of query if sensor is online
<p>State: <?echo $pirstan;?></p> // echoing current state of sensor
<p>Last changed: <?echo $rowpir['Czas'];?></p> //echoing timestamp of previous state of sensor
<img class="center" src="pir.gif" alt="Kontrakton"> // showing image related to current sensor state (for example walking person to PIR sensor)
</div>
任何有关上述问题的帮助都将得到赞赏。特别是带有注释的示例代码,所以我了解此事。其他解决问题的方法也是受欢迎的,也许我是短视的。
对于那些对未来感兴趣的人,最终代码感谢: Fiido93
<script type="text/javascript">
var old_count = 0;
setInterval(function(){
$.ajax({
type : "POST",
url : "test.php",
success : function(data){
if (data > old_count) {
$('.divname' ).load(window.location.href + ' .divname');
old_count = data;
}
}
});
},1000);
和测试.php
$result = mysqli_query($conn,"mysqlquery");
while($row = mysqli_fetch_array($result))
{
$printme= $row[0]; // i only echo row 0 here !!
}
echo "$printme";
websocket 或 socket.io 来解决问题的示例:
当您的客户获得信息时您可以直接进行 ajax 调用
socket.on('notification', function(){
ajaxFunction();
});
如果你不想你这个方法。p/s 这只是一个建议。执行验证 获取旧的行数据并比较后端中的新行数据。
通过 js
<script>
var old_count = 0;
setInterval(function(){
$.ajax({
type : "POST",
url : "test.php",
success : function(data){
if (data > old_count) {
alert('new record on i_case');
old_count = data;
}
}
});
},1000);
</script>