如何使页面刷新工作的客户端代码
问题描述:
我需要为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,它同时提供localStorage
和sessionStorage
周围的包装。
感谢您的回答,我尝试使用会话方式。但是,这是不可能的设置PHP会话通过客户端端node.js?var sessionControl =“<?php $ _SESSION ['control'] ='1';?>” $('#pushnotif')。html sessionControl);如果我写“”标签,他们只是没有正确解释HTML。 – tugce 2013-05-08 07:19:15
PHP在服务器端执行,而不是在客户端执行。如果你希望能够在客户端存储会话数据,你需要编写一个服务器端Web服务(即在这种情况下是一个PHP文件,将数据作为输入),并从客户端调用该服务,侧。不过,我会建议不要这样做,因为可能存在滥用问题。 – 2013-05-13 11:12:54