目前我有一个ajax函数可以获取我需要的信息,但是当添加新内容时我必须手动刷新它。
我的代码目前如下所示:
<script>
$(function (){
$(function ajax(){
$.ajax({
url: "info.php",
type:"get",
datatype: "json",
success: function(data){
var clean = jQuery.parseJSON(data);
$.each(clean, function(i){
var t = new Date(clean[i]['upplagd']);
var tid = (t.getDate() + " / "+ (t.getMonth()+1) + " / " + t.getFullYear());
var table = $('tbody').html();
$('tbody').html(table + '<tr><td><img src="img/' + clean[i]['bild'] + '"></td><td>' +
clean[i]['titel'] + "<br><b>" + clean[i]['kund'] + "</b></td><td>" +
clean[i]['kommun'] + "</td><td>" +
tid + "</td></tr>");
}
});
});
});
</script>
因此,它获取信息并将其打印出来。非常简单。 这是 AJAX 获取信息时我的 php 页面。
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GTM");
$database = "database";
$server = "localhost";
$user = "root";
$pass = "pass";
$db = mysqli_connect($server,$user,$pass,$database);
$sql = "SELECT * FROM xterna";
$array = [];
$result = mysqli_query($db,$sql) or die(mysqli_error($conn));
while($row = mysqli_fetch_assoc($result)){
$row_arr['id'] = $row['id'];
$row_arr['kommun'] = $row['kommun'];
$row_arr['kund'] = $row['kund'];
$row_arr['titel'] = $row['titel'];
$row_arr['upplagd'] = $row['upplagd'];
$row_arr['bild'] = $row['bild'];
array_push($array,$row_arr);
}
$json = json_encode($array, JSON_PRETTY_PRINT);
echo $json;
?>
我知道您可以使用 setinterval 并调用该函数,但是当我这样做时,它会为我提供所有内容,而不仅仅是一个数据。
有人知道简单的代码或什么吗?
最佳答案
正如您所知,HTTP 不是全双工双向通信 channel ,因此没有明显的方法来通知浏览器数据库有更新,但有多种解决方案:
1-定期检查服务器
在此解决方案中,您在一定时间后定期发送 HTTP 请求,服务器将响应更新(如果有)。对于性能问题,我不推荐这种方法。
2-长轮询
这基本上是向服务器发送一个 HTTP 请求,然后服务器将保持该请求打开,直到有新的更新,然后服务器将返回带有更新的响应,然后发送另一个请求,依此类推。
3-Websocket
websockets 是与 HTML5 捆绑在一起的一项新功能,浏览器可以打开到服务器的全双工双向通信 channel ,服务器可以向客户端发送更新,而无需重复发送 HTTP 请求来检查新更新。
关于javascript - 希望我的表在新内容添加到数据库时刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42781102/