ajax - 使用 AJAX 显示通知
问题描述
我的用户面板上有一个导航栏。导航栏的一部分指示用户是否有新的未读消息。在这种情况下,图标旁边会出现一个徽章。我已经简化了这里的代码,使它们更容易理解和阅读。
这是简化的 HTML 代码:
<div class="btn-group msg-box">
<i class="fa fa-envelope"></i>
// this is the default state, no badge is shown
</div>
这是每 10 秒调用一次自定义函数的 AJAX 请求:
<script type='text/javascript'>
$(document).ready(function(){
setInterval(checkMsg,10000);
});
function checkMsg(){
$.get('ajax.php',{user_id : <?php echo $user_id; ?>},function(data){
$('.msg-box').html(data);
});
}
</script>
这是 ajax.php 文件内容:
if(isset($_GET['user_id']){
// a few lines of code here to check if that particular user has any unread message.
// In such case a variable name $newMessage is set to 1. Now ... :
if($newMessage>0){
$data='
<i class="fa fa-envelope"></i>
<span class="badge"><i class="fa fa-info"></i></span>
';
}else{
$data='
<i class="fa fa-envelope"></i>
';
}
echo $data;
}
首先,我知道我编写这个 AJAX 请求的方式非常菜鸟,但无论如何它工作得很好,最多一点!
如果用户有新消息,并且他们留在页面上,则代码会完美运行并显示徽章。但是当用户刷新页面或转到另一个页面时,即使他们有一条新消息,在没有标记的地方也会再次显示默认状态。我知道这当然是因为我已经通过 HTML 代码指定了默认状态。
我需要知道如何保持 AJAX 请求的结果,而不管用户刷新页面或转到另一个页面的次数。
更新
我尝试将查询结果存储在我的 ajax.php 文件中的 SESSION 中。所以不是$data
我写的$_SESSION['data']
。
回到我的 HTML,我做了以下更改:
<div class="btn-group msg-box">
<?php
if(!isset($_SESSION['data'])){
?>
<i class="fa fa-envelope"></i>
<?php
}else{
echo $_SESSION['data'];
}
?>
</div>
我做出这个改变是因为我考虑到根据定义,SESSIONS 是在域内全局创建和访问的。因此,一旦设置好,就可以在所有其他页面上进行检查和使用。因此,只有在未设置该 SESSION 时,才应显示默认状态。但这似乎也没有我想要的结果。仍然会发生同样的事情。
解决方案
好的,现在回答我自己的问题。:)
我的UPDATE似乎是我尝试过的一个好主意。那里的问题是我session_start();
在我的主 PHP 文件上编写了该文件,该文件包含在项目的所有其他 PHP 文件中。
所以我基本上认为,调用ajax.php文件的时候,就不用再写session_start();
了。因为 ajax.php 在已经包含在其中的 PHP 文件中被调用session_start();
。所以,我错了!
在 ajax.php 中添加session_start();
到我的代码的开头只是解决了这个问题。
推荐阅读
- python-3.x - 如何在 Python3 中将十六进制编码字节转换为字符串?
- python-3.x - 狮身人面像不捕捉码头字符串
- python - 走进 dict 以找到所需的键
- sql-server - 如何在合并中插入多行?
- sql-server - 高逻辑读
- angular - 如何将角度动画附加到角度水平步进器cdk中的步骤之间的过渡?
- php - mssql_connect 不会连接同一 SQL Server 上的不同数据库
- android - Android Webview 中的电子邮件链接显示为 [email protected]
- liferay - Liferay 7 Eclipse IDE 覆盖默认类别行为
- c# - 如何使用高度和宽度调整 Texture2D 的大小?