2013-06-28 31 views
2

当用户点击收件箱中的链接时,我想将链接相关的消息标记为seen赶上超链接点击使用JavaScript(或jQuery)?

SO也有此功能,
如果有人回复我的文章,SO显示了一些事情发生在我的文章。
当我点击收件箱消息并访问帖子后,SO不再显示通知标记。

我猜测每次用户访问任何问题页面时,访问某个问题的用户是否收到收件箱消息都太昂贵了。
我不知道是否有可能赶上clicking-link在收件箱页面,这样我就可以在引擎盖下发送Ajax请求将邮件标记as seen

希望我的问题是清楚的。

+0

是的,这是可能的。你有什么尝试?你有什么麻烦?提示:谷歌东西像jQuery手柄链接点击 – SLaks

+0

这是明确的stackoverflow?或者只是想处理被点击的链接? – abc123

+0

“*每次用户访问任何问题页面时,如果访问用户的问题是否收到收件箱消息,测试费用太高*” - 您为什么会这么猜测?当然,你必须这样做才能向他显示信息。 – Bergi

回答

1

为每个单击的消息添加一个自定义数据属性。我不知道你是如何显示的消息,但在这个例子中,我们将使用一个跨度:

<span class="message">Some Message</span> 

而且JS:

$(".message").click(function() { 
    $(this).data("visited", true); 
}); 

然后你就可以检查跨度,看看他们是否已经被访问过。如果你仍然想要进行AJAX调用,那么你可以简单地在点击处理程序中添加一个AJAX事件。

0

我假设你在消息表上有某种'status'字段来区分'Read'和'Unread'。

如果你问如何未读邮件的数量有效地存储在一个收件箱中,但不运行在每个页面加载查询,这可以很容易地通过设置$ _SESSION变量来实现:

$_SESSION['unread_messages'] = 2; 

在此之后变量已设置,您可以定期检查(每5分钟左右)以在合理的窗口内保持最新状态。当单击并阅读消息时,您将从此值中减1或重新查询未读消息的数量。

如果您询问如何更新数据库和用户界面,有两种主要方法可以解决这个问题。这将取决于用户点击邮件时脚本当前发生的情况。您是否提出了加载消息的AJAX请求,或者该链接是否会将用户带到不同的页面?

如果在单击消息时发出AJAX请求,只需在AJAX请求中调用的脚本还将该消息标记为已读(在数据库中),然后使用JavaScript将任何UI更新为当前页面(例如删除被点击的消息上的粗体文本)。

如果单击消息重定向到显示整个消息的其他页面,则可以在该页面加载时将消息标记为已在数据库中读取。