2012-03-15 19 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秒ごとにスクリプトにget要求を送信し、それに応じてデータを取得します。瞬間的な通知が必要な場合は、同期を調べることができます。スクリプト・ポイントとクライアント・サイドの間で送信されるデータは決して閉じることはありません。どちらもプラスとドローバックを持っています。非同期は、2つの悪のうちの小さいものとしてより一般的に使用されます。さらに、適切なハードウェアを使用せずに同期させることで、適切な設定がなくても、サイトをロックしてユーザーのブラウザをフリーズさせることができます。

+0

誰かが$ this-> load-> library( 'javascript')を$ this-> load - >( 'jquery')に変更する必要があります。あなたのやり方は少し徹底的です。しかし、Androidブラウザでは、これは私がサイトに再度アクセスしたくないスクリプト(ページは壊れたレコードのように機能する)であるため、人々にどちらかをやってもらうことを嫌っています。 –

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を実行して、リロードせずにユーザーのページに出力します。

関連する問題