2013-05-06 88 views
1

我需要爲Web客戶端推送通知,但問題是推送通知不會保留在頁面刷新屏幕上。我應該如何在沒有編寫db的情況下在屏幕上顯示定義的時間?如何使頁面刷新工作的客戶端代碼

客戶端

socket.on('notification', function (data) { 
    //console.log(data.message); 

    $('#pushnotif').html(data.message); 
    socket.emit('other', data); 

    }); 

服務器側

function sendMessage(message) { 
    io.sockets.volatile.emit('notification', {'message': message}); 
    console.log("abc"); 
} 

回答

3

推送通知被丟棄,因爲刷新的瀏覽器窗口的情況下,當前狀態(包括整個DOM)被丟棄。您需要在服務器端或客戶端持久保存消息。

如果您已經使用某種形式的會話,則可以將消息寫入您的活動會話。或者,如果您在提交通知之前已經存儲了某些通知,您可以簡單地延遲將其從存儲中刪除(在一定的時間內或直到用戶解散它們,將事件發送回服務器)並重新發送所有存儲在每個初始連接上的通知。

但是因爲你說你想避免寫入分貝,我認爲這是不可能的。

在客戶端存儲狀態的傳統解決方案是使用cookies。您也可以通過操作document.cookie在客戶端設置cookie,但這有點難看。

more modern approach使用的localStorage(由大多數現代瀏覽器支持的特定域和端口密鑰值存儲)或它的兄弟。如果你不想依賴HTML5支持(例如你正在處理IE6用戶),那麼there are plenty of solutions可以提供圍繞各種等價物的廣泛抽象。請注意,使用IE8及以下版本時,存儲空間可能會非常有限,因此請注意將哪些數據轉儲到其中。

如果你是舒服限制支持此功能,以現代Web瀏覽器的用戶,並希望繼續保留在jQuery的,there's even a jQuery plugin for that,它同時提供localStoragesessionStorage周圍的包裝。

+0

感謝您的回答,我嘗試使用會話方式。但是,這是不可能的設置PHP會話通過客戶端端node.js?var sessionControl =「<?php $ _SESSION ['control'] ='1';?>」 $('#pushnotif')。html sessionControl);如果我寫「<>」標籤,他們只是沒有正確解釋HTML。 – tugce 2013-05-08 07:19:15

+0

PHP在服務器端執行,而不是在客戶端執行。如果你希望能夠在客戶端存儲會話數據,你需要編寫一個服務器端Web服務(即在這種情況下是一個PHP文件,將數據作爲輸入),並從客戶端調用該服務,側。不過,我會建議不要這樣做,因爲可能存在濫用問題。 – 2013-05-13 11:12:54