我在我的项目上创建了一个通知系统,您从名为“ notification”的数据库表中收到具有以下结构的通知:
---------------------------------
| ID | TITLE | VIEWED | ID_USER |
---------------------------------
| 1 | test | 0 | 15 |
---------------------------------
| 2 | test2 | 1 | 12 |
---------------------------------
然后我收到ID用户的通知,如果查看的次数为0,则添加带有未查看通知计数的铃铛。
但是问题是您需要刷新页面以获取通知,所以我的问题是:是否有任何方法可以异步通知?这意味着当您收到通知时,您会同时收到铃声,而无需刷新页面
答案 0 :(得分:1)
您需要使用诸如Ratchet(http://socketo.me)之类的websockets库。
答案 1 :(得分:1)
您不能严格在PHP中执行此操作,但可以在循环中使用javascript函数每隔5秒左右对PHP文件运行AJAX请求,以查看登录用户是否收到了最近的任何通知。哪些PHP文件以json数组作为响应,该数组包含ajax请求进入DOM的通知详细信息。
在我的示例中,我将在脚本中使用jQuery来运行ajax。
HTML文件(index.php)
<html>
<head>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script>
var userid = "<?php echo $_SESSION['id']; ?>";
setInterval(NotificationRequest, 5000); //will run the function 'NotificationRequest' every 5 seconds
function NotificationRequest() {
$.ajax({
url: 'checknoti.php', //the php file to request
dataType: 'text',
data: {data : userid},
method: 'POST',
success: function(result) {
$('div#notification').html(result); //insert result from file to inside the div element
}
});
}
</script>
</head>
<body>
<h1>Notification List</h1>
<div id="notification"></div>
</body>
</html>
PHP文件(checknoti.php)
$conn = mysqli_connect("127.0.0.1", "username", "password", "database");
$userID = $_POST['data'];
$sql = "SELECT * FROM `notification` WHERE `ID_USER`='$userID' AND `VIEWED`='0'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_accoc($result);
echo $row['title'];
此脚本(不完全是),应导致ajax请求向服务器询问用户尚未查看的通知,然后html将更新DIV中的文本(标识为“ notification” ),以及回显的通知标题。
有关包含方法的更多信息:
-https://www.w3schools.com/jsref/met_win_setinterval.asp
-http://api.jquery.com/html/
-http://api.jquery.com/jQuery.Ajax/