Socket.io,让不同的页面不接收每条消息?
Socket.io, keeping different pages from receiving every message?
对不起,这个令人困惑的标题,但我不知道如何解释我的问题,请有人相应地为我编辑。所以我有一个从节点服务器接收消息的网站页面。
socket.on('item finished', function(data){
$('#item'+data).html('finished');
});
所以基本上我是在告诉客户端,一旦项目完成,它必须告诉用户。
我将我所有的 js 代码放在 script.js 中并在页面中调用它,所以我的所有页面中都有脚本。每当我在其他页面上并且服务器向客户端发出 'item finished' 时,控制台上就会弹出一条消息。
Uncaught TypeError: Cannot read property 'html' of null
错误不太像那样,但您明白了,客户端正在尝试执行它应该执行的操作,但我不希望这种情况发生。
那么有没有办法避免在不同页面使用同一个脚本文件出现控制台错误呢?我错过了什么?
谢谢!
对于不适用于给定页面的消息,您有多种选择。
将 item finished
消息侦听代码分离到一个单独的脚本中,以便仅加载该脚本并且侦听器仅在您想要实际响应该消息的页面中处于活动状态.
保持你在所有页面中收听该消息的方式,但在该消息的处理程序中检查你所在的页面类型,以决定是否应该忽略消息或对其进行处理,从而避免在页面类型错误时尝试对其进行处理。
对执行操作的代码进行防弹,以便它在尝试对其进行操作之前检查所需元素是否存在。这可能看起来像这样:
代码:
// 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');
}
});
对不起,这个令人困惑的标题,但我不知道如何解释我的问题,请有人相应地为我编辑。所以我有一个从节点服务器接收消息的网站页面。
socket.on('item finished', function(data){
$('#item'+data).html('finished');
});
所以基本上我是在告诉客户端,一旦项目完成,它必须告诉用户。 我将我所有的 js 代码放在 script.js 中并在页面中调用它,所以我的所有页面中都有脚本。每当我在其他页面上并且服务器向客户端发出 'item finished' 时,控制台上就会弹出一条消息。
Uncaught TypeError: Cannot read property 'html' of null
错误不太像那样,但您明白了,客户端正在尝试执行它应该执行的操作,但我不希望这种情况发生。 那么有没有办法避免在不同页面使用同一个脚本文件出现控制台错误呢?我错过了什么? 谢谢!
对于不适用于给定页面的消息,您有多种选择。
将
item finished
消息侦听代码分离到一个单独的脚本中,以便仅加载该脚本并且侦听器仅在您想要实际响应该消息的页面中处于活动状态.保持你在所有页面中收听该消息的方式,但在该消息的处理程序中检查你所在的页面类型,以决定是否应该忽略消息或对其进行处理,从而避免在页面类型错误时尝试对其进行处理。
对执行操作的代码进行防弹,以便它在尝试对其进行操作之前检查所需元素是否存在。这可能看起来像这样:
代码:
// 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');
}
});