2013-02-12 65 views
0

我有一个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”链接什么也不做。这是预期的功能吗?

回答

1

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

所以利用回调可能是这样的:

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

如果这是你将在每一个通知,你可以做以下使用...

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

我的猜测是,你将需要以某种方式单独跟踪通知,这样,当您发出ajax请求解除它时,您将传回主键,或者类似的东西。我建议的一件事是使用beforeOpen回调函数,并使用data()方法为主键设置唯一标识符。这样,当你设置你的信息时,它就会受到约束,你可以在稍后解雇时引用它,而不必担心在其他地方处理信息。

希望这会有所帮助!

+0

谢谢你回复斯坦。我真的没想到作者或jGrowl会回应。关于beforeClose(),我在上面添加了一些额外的评论(更新02/12)。我似乎无法接近'x'来触发beforeClose()回调函数。 “关闭所有”似乎触发BeforeClose()之前。 – jjwdesign 2013-02-12 17:50:00

+0

进一步测试:如果我更改为使用close()回调,则单击'x'或'close all'将触发close()回调函数。与closeBefore(),我只看到它触发'关闭所有'。 – jjwdesign 2013-02-12 19:27:34

+0

哎呀!在关闭()之前单独关闭不触发实际上是一个错误。我已经在github上提交了它,并将在今天晚上修复它。仅供参考:https://github.com/stanlemon/jGrowl/issues/4 – stanlemon 2013-02-13 13:48:38