2012-03-15 82 views
2

我想知道和調查是找出如何我可以有一個頁面/功能或什麼不加載每隔幾秒鐘或什麼不是這樣我可以立即向我的用戶報告我的通知CodeIgniter CMS表示他們的收件箱中有新的個人信息。即時通知

當用戶從登錄屏幕進入儀表板時,當用戶點擊信封時,它會顯示最後5條消息,如果他們收到一個同步的pm消息,它會立即通知他們一個覆蓋層,它會增加紅色圓圈,如果它已經存在,或將其添加爲1

回答

1

我假設你的javascript已經加載,我假設你也使用jquery。那就這樣。

我的建議與乍得有點相似。但是從某種意義上說,更多的可重複使用,如果你想爲什麼原因獨立調用它。

var $messageCountJSON; 
var messageTimer = ''; 
var messageInterval = 5; 

//assumed JSON response is {"count":"20"} for example sake. 

function messageCount(displayElementID) 
{ 
    $.get('/url/to/script/', function(data) 
    { 
     $messageCountJSON = data; 
    }, 'json'); 
    if(displayElementID != null && displayElementID != undefined && displayElementID != '') 
    { 
     $('#'+displayElementID).html(data.count); 
    } 
} 

$(document).ready(function() 
{ 
    messageTimer = setInterval(function(){messageCount();}, messageInterval*1000); 
}); 

//you can optionally kill the timed interval with something like 
$('#element').click(function(){clearInterval(messageTimer);}) 

我當然只是拉了這一點,我的屁股的心血來潮這裏我輸入所以它不是100%測試,但值得一試沒有少。

值得一提的是,這不是即時通知。這是異步的;通知,這意味着在這種情況下每5秒鐘發送一次獲取請求到腳本並相應地從中獲取數據。如果您需要即時通知,則可以查看「同步」;在腳本點和客戶端之間傳輸的數據從不關閉。兩者都有加分和退後。異步更常用於2個惡意中較小的一個。更重要的是,如果沒有正確的硬件來支持並且沒有正確的設置,同步會導致您的站點鎖定並凍結用戶瀏覽器。

+0

有人應該將$ this-> load-> library('javascript')更改爲$ this-> load - >('jquery'),因爲這實際上就是您在那裏做的。你的方式更徹底一點。然而,我不喜歡鼓勵人們這樣做,因爲在Android瀏覽器中,這是使我永遠不想再次訪問該網站的腳本(頁面就像一個破損的記錄)。 – 2012-03-16 06:37:11

2

在你的控制器:

$this->load->library('javascript'); 

在你看來:

<script> 
$(window).load(function checkMessages() { 
$.ajax({ 
url: 'instant_messenger.php', 
success: function(data) { 
$('messagebox').html(data); 
}}); 
setTimeout('checkMessages', 5000); 
}); 
</script> 

...其中'instant_messenger.php'是檢查新郵件的腳本,'messagebox'是您希望郵件顯示的html元素。

這是一個基本的例子,但是這個腳本會每5秒運行一次check_messages.php並將輸出放到用戶的頁面上,而不必重新加載。