如何使页面刷新工作的客户端代码

问题描述:

我需要为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"); 
} 

推送通知被丢弃,因为刷新的浏览器窗口的情况下,当前状态(包括整个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