jGrowl和Close回调来请求Ajax


jGrowl and Close Callback to request Ajax?

我有一个关于如何维护jGrowls状态的jQuery/jGrowl问题。我有一个通知系统,我已经建立了使用PHP/MMySQL。这是容易的部分。我已经设法使jGrowls正确显示。

现在,我想保持消息/jGrowls的状态,直到用户单击每个jGrowl的"关闭"或关闭所有jGrowl的"关闭所有"链接。我有一个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关闭链接时,beforeClose()回调函数会被触发,该链接是jGroll右侧的"x"链接。"x"收盘有回调吗?注意,当用户单击"关闭所有"时,beforeClose()回调确实会正确启动,并为每个jGrowl触发函数。因此,在某种程度上,"关闭所有"就像一个"将所有标记为已读"链接,而"x"链接什么都不做。这是预期的功能吗?

你是对的,你可以选择两个不同的回调,你可以使用'close'或'beforeClose'。我可能会选择"beforeClose",因为此时通知已被驳回,接下来将开始从页面中删除它。

因此,利用回调可能看起来像这样:

$.jGrowl('Message here...', {
    beforeClose: function(){
        $.ajax({
            url: '/path/to/dismiss/action',
            success: function(){}
        });
    }
});

如果这是你将在每次通知中使用的东西,你可以执行以下操作。。。

$.jGrowl.defaults.beforeClose = function(){
    //...
}

我的猜测是,你需要以某种方式单独跟踪通知,这样,当你发出ajax请求来驳回它时,你就会传回主键或类似的东西。我建议你使用beforeOpen回调,并使用data()方法为主键设置一个唯一的标识符。这样,当你设置消息时,它就被绑定了,以后当它被驳回时,你可以引用它,而不必担心在其他地方篡改信息。

希望这能有所帮助!