2013-02-12 63 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