Socket.io,保持不同的页面接收每个消息?
对不起,这个令人困惑的标题,但我不知道如何解释我的问题,有人请相应地编辑我。 所以我有一个网站页面,从节点服务器接收消息。
socket.on('item finished', function(data){ $('#item'+data).html('finished'); });
所以基本上我告诉客户,一旦一个项目完成,它必须告诉用户。 我将所有的js代码放在script.js中,然后在页面中调用它,所以我的所有页面都有脚本。 无论何时我在其他页面上,服务器向客户端发出“项目已完成”消息都会在控制台上popup。
Uncaught TypeError: Cannot read property 'html' of null
这个错误并不是那样的,但是你明白了,客户正在试图做它应该做的事情,但是我不希望发生这种事情。 那么有没有办法避免在不同的页面中使用相同的脚本文件的控制台错误? 我错过了什么? 谢谢!
对于不适用于给定页面的消息,您有几种select。
-
将
item finished
消息监听代码分离成一个单独的脚本,以便只加载该脚本,并且监听器仅在要实际响应该消息的页面中处于活动状态。 -
在所有页面中都保留听到该消息的位置的方式,但在该消息的处理程序中,请检查所处页面的types,以决定是否应忽略该消息或对其执行某些操作,从而避免尝试当它是错误的页面时,用它做些事情。
-
防范执行该操作的代码,以便在尝试操作之前检查是否存在所需的元素。 这可能看起来像这样:
码:
// You aren't supposed to have to do this in jQuery, so I'm guessing that // you aren't actually showing us the right code or error message // But, this is the general idea of defensive coding socket.on('item finished', function(data){ var target = $('#item'+data); if (target.length) { target.html('finished'); } });