我有一个jQuery/jGrowl有关如何保持呈现的jGrowls状态的问题。我有一个使用PHP/MySQL构建的通知系统。这是很容易的部分。我设法让jGrowls正确显示。jGrowl和Close回调请求Ajax?
现在,我想维护消息/ jGrowls的状态,直到用户点击每个单独的jGrowl的“关闭”或关闭所有jGrowls的“关闭所有”链接。我有一个users_notifications MySQL表,我可以管理哪些通知已被“读取”。我认为最好的方法是使用close()或beforeClose()回调函数将getJSON(ajax)请求发送回服务器,但我不确定如何写入。我需要通过请求传递通知ID。
<?php
if (!empty($notifications))
{
foreach ($notifications as $notification)
{
?>
<script>
<!--
$(document).ready(function() {
var notification = <?php echo json_encode($notification); ?>;
$.jGrowl(notification.message, {
beforeClose: function(){
var markReadUrl = '<?php echo site_url('notifications/ajax_mark_as_read') ?>' + '/' + notification.id;
$.getJSON(markReadUrl, function(data) {
console.log(data);
});
}
});
});
//-->
</script>
<?php
}
}
?>
更新02/12:我想我发现了什么让我感到困惑。
当测试我使用2或3通知(jGrowls)。我期望当用户点击jGrowl右边的'x'链接时,会触发beforeClose()回调函数。是否有'x'的回调关闭?请注意,当用户点击“全部关闭”时,beforeClose()回调会正确激发,并触发每个jGrowl的函数。所以,从某种意义上说,“全部关闭”就像一个“全部标记为已读”链接,而“x”链接什么也不做。这是预期的功能吗?
谢谢你回复斯坦。我真的没想到作者或jGrowl会回应。关于beforeClose(),我在上面添加了一些额外的评论(更新02/12)。我似乎无法接近'x'来触发beforeClose()回调函数。 “关闭所有”似乎触发BeforeClose()之前。 – jjwdesign 2013-02-12 17:50:00
进一步测试:如果我更改为使用close()回调,则单击'x'或'close all'将触发close()回调函数。与closeBefore(),我只看到它触发'关闭所有'。 – jjwdesign 2013-02-12 19:27:34
哎呀!在关闭()之前单独关闭不触发实际上是一个错误。我已经在github上提交了它,并将在今天晚上修复它。仅供参考:https://github.com/stanlemon/jGrowl/issues/4 – stanlemon 2013-02-13 13:48:38